Вот коды, которые у меня есть: (Я просто заменил идентификаторы на 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)
Я использую 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