Встроенная регистрация Meta Facebook в Django PythonPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Встроенная регистрация Meta Facebook в Django Python

Сообщение Anonymous »

Я работаю в компании, которая работает с чат-ботом WhatsApp. Я создал страницу, на которой наши клиенты могут войти в систему со своей бизнес-учетной записью Facebook, чтобы получить разрешения на отправку сообщений от их имени. Я реализую встроенную регистрацию на простой странице только для того, чтобы получить токен доступа. В целях тестирования я создал простой бэкэнд на Python для возврата токена доступа на страницу.
Вот коды, которые у меня есть: (Я просто заменил идентификаторы на xxx, yyy и zzz потому что я думаю, что они здесь не нужны)
Фронтенд

Код: Выделить всё




window.fbAsyncInit = function () {
// JavaScript SDK configuration and setup
FB.init({
appId: "xxx", // Facebook App ID
cookie: true, // enable cookies
xfbml: true, // parse social plugins on this page
version: "v20.0", //Graph API version
});
};

// Load the JavaScript SDK asynchronously
(function (d, s, id) {
var js,
fjs = d.getElementsByTagName(s)[0];
if (d.getElementById(id)) return;
js = d.createElement(s);
js.id = id;
js.src = "https://connect.facebook.net/en_US/sdk.js";
fjs.parentNode.insertBefore(js, fjs);
})(document, "script", "facebook-jssdk");

// Facebook Login with JavaScript SDK
function launchWhatsAppSignup() {

// Launch Facebook login
FB.login(
function (response) {
if (response.authResponse) {
console.log("response", response);
const code = response.authResponse.code;

// Make a call to the Flask server with Axios
axios
.post("http://localhost:5000/get-access-token", { code: code })
.then((response) => {
console.log("Server response:", response.data);
})
.catch((error) => {
console.error("Error making the server request:", error);
});
} else {
console.log("User cancelled login or did not fully authorize.");
}
},
{
config_id: "yyy", // configuration ID goes here
response_type: "code", // must be set to 'code' for System User access token
override_default_response_type: true, // when true, any response types passed in the "response_type" will take precedence over the default types
extras: {
featureType: "only_waba_sharing",
setup: {
solutionID: "zzz",
},
},
}
);
}



body {
background-image: url(background4.png);
background-size: cover;
background-repeat: no-repeat;
background-position: center center;
}



style="
width: 100%;
height: 100%;
display: flex;
justify-content: center;
align-items: center;
"
>




Login with Facebook







Бэкенд

Код: Выделить всё

from flask import Flask, request, jsonify
from flask_cors import CORS
import requests

app = Flask(__name__)
CORS(app)

@app.route('/get-access-token', methods=['POST'])
def get_access_token():
data = request.get_json()
code = data.get('code')
if not code:
return jsonify({'error': 'No code provided'}), 400

app_id = '252227590835196'
app_secret = 'cf9e34a2eb16817e83ff0caf6ffe145d'

url = f'https://graph.facebook.com/v17.0/oauth/access_token?client_id={app_id}&client_secret={app_secret}&code={code}'

response = requests.get(url)

if response.status_code == 200:
print(jsonify(response.json()))
return jsonify(response.json())
else:
return jsonify({'error': 'Failed to get access token', 'details': response.json()}), response.status_code

if __name__ == '__main__':
app.run(port=5000)
Это работает нормально, когда я обслуживаю переднюю часть с помощью команды http-server и запускаю серверную часть.
Я использую ngrok тоже. С его помощью я могу использовать URL-адрес (с https) в конфигурациях моего приложения в системе Meta. Я поместил его в Разрешенные домены для JavaScript SDK (в разделе «Вход в Facebook для бизнеса») и в Диспетчер доменов (в настройках приложения -> раздел «Дополнительно»). Это означает, что когда пользователь нажимает кнопку «Войти через Facebook», открывается всплывающее окно. Если пользователь закрывает всплывающее окно, он вызывает обратный вызов в FB.login и получает ответ {authResponse: null, status: 'unknown', который заставляет программу войти в консоль «Пользователь отменил вход в систему». или не полностью авторизовал.». И если пользователь завершает вход, он вызывает серверную часть, и я получаю токен доступа.
Проблема в том, что когда я пытаюсь «переместить» этот код в Django, функция обратного вызова в FB Вызывается .login, возвращающий {authResponse: null, status: 'unknown' в ответ, когда появляется окно для входа в систему, и игнорирует все, что я делаю после этого (например, закрытие окна или завершите вход).
Я запросил чатGPT, и в итоге он предложил следующее:
  • Добавьте URL-адрес ngrok в ALLOWED_HOSTS.
  • Добавьте URL-адрес ngrok в CSRF_TRUSTED_ORIGINS.
  • Проверьте настройки SESSION_COOKIE_SECURE и CSRF_COOKIE_SECURE.
  • Настройте SECURE_PROXY_SSL_HEADER для обработки HTTPS-прокси.
  • Дважды проверьте настройки приложения Facebook, особенно URI перенаправления.
  • Проверьте вкладку «Сеть» браузера, чтобы получить более подробную информацию об неудачных запросах.
Я уже все перепробовал, но безуспешно.
Кажется, что Django каким-то образом мешает входу в систему, но не знаю, как и почему.
Есть идеи?
При необходимости могу предоставить дополнительную информацию.

Подробнее здесь: https://stackoverflow.com/questions/790 ... ngo-python
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»