[英]PassportJS: Is it possible to not serialize a user when connecting an account?
[英]Debugging AllAuth: social account not logging user in despite connecting successfully
單擊登錄表單中的facebook登錄按鈕會正確顯示fb登錄彈出窗口,但是在輸入憑據后,該彈出窗口將關閉,並且沒有任何反應。
在不重新加載頁面的情況下再次單擊該按鈕,確認fb帳戶已連接,因為瀏覽器控制台將打印:
當用戶已經連接時調用FB.login()。
但是,用戶數據庫中沒有新條目出現,用戶沒有被重定向也沒有登錄。因此問題似乎出在AllAuth處理事情的方式上。 盡管在后端的任何地方都沒有調試信息,但這很難弄清。
這是allauth設置:
LOGIN_REDIRECT_URL = '/'
LOGOUT_REDIRECT_URL = '/'
DEFAULT_FROM_EMAIL = "[removed for stackoverflow]"
ACCOUNT_EMAIL_REQUIRED = True
SOCIALACCOUNT_EMAIL_REQUIRED = True
ACCOUNT_UNIQUE_EMAIL = True
ACCOUNT_EMAIL_VERIFICATION = 'mandatory'
SOCIALACCOUNT_EMAIL_VERIFICATION = "mandatory"
SOCIALACCOUNT_QUERY_EMAIL = True
SOCIALACCOUNT_PROVIDERS = \
{'facebook':
{'METHOD': 'oauth2',
'SCOPE': ['email','public_profile', 'user_friends'],
'AUTH_PARAMS': {'auth_type': 'reauthenticate'},
'FIELDS': [
'id',
'email',
'name',
'first_name',
'last_name',
'verified',
'locale',
'timezone',
'link',
'updated_time'],
'EXCHANGE_TOKEN': True,
'VERIFIED_EMAIL': False,
'VERSION': 'v2.4'}}
這是登錄頁面上的js:
<script>
window.fbAsyncInit = function() {
FB.init({
appId : '[removed for stackoverflow]',
xfbml : true,
version : 'v2.10'
});
FB.AppEvents.logPageView();
};
(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 = "//connect.facebook.net/en_US/sdk.js";
fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));
</script>
首先,安裝django-allauth
$(venv) pip3 install django-allauth
現在,將這些代碼放在settings.py中已安裝的應用程序上
'django.contrib.sites',
'allauth',
'allauth.account',
'allauth.socialaccount',
'allauth.socialaccount.providers.facebook',
另外,將以下代碼放入您的settings.py
AUTHENTICATION_BACKENDS = (
'allauth.account.auth_backends.AuthenticationBackend',
'django.contrib.auth.backends.ModelBackend',
)
還要將它們放在settings.py中
SOCIALACCOUNT_PROVIDERS = \
{'facebook':
{'METHOD': 'oauth2',
'SCOPE': ['email','public_profile', 'user_friends'],
'AUTH_PARAMS': {'auth_type': 'reauthenticate'},
'FIELDS': [
'id',
'email',
'name',
'first_name',
'last_name',
'verified',
'locale',
'timezone',
'link',
'gender',
'updated_time'],
'EXCHANGE_TOKEN': True,
'LOCALE_FUNC': lambda request: 'kr_KR',
'VERIFIED_EMAIL': False,
'VERSION': 'v2.4'}}
可以在https://developers.facebook.com/上找到ID和密鑰。創建一個應用程序並轉到DashBoard,您將看到自己的
#facebook
SOCIAL_AUTH_FACEBOOK_KEY = 'secret!' # App ID
SOCIAL_AUTH_FACEBOOK_SECRET ='secret!' #app key
您可能要添加此
LOGIN_REDIRECT_URL = "/"
#if you succeed in login, you'll be redirected to the main page.
現在我們需要修改urls.py將此代碼添加到您的urlpatterens
url(r'^accounts/',include('allauth.urls')),
現在回到https://developers.facebook.com/進入設置,單擊“添加平台”,單擊網站,輸入http:// localhost:8000 /並單擊快速啟動按鈕。 繼續前進並做dev.facebook會導致什么。
現在,您需要在settings.py中設置您的網站ID
#site id
SITE_ID = <your local host site id> #i.e http://localhost:8000
# for the dev mode, you need to use localhost's id facebook does not support the name 127.0.0.1:8000
#little options for your page's signup.
ACCOUNT_EMAIL_REQUIRED=True
我們需要在django管理員中注冊我們的站點ID和社交應用程序。首先,進行遷移和運行服務器
$(venv) python3 manage.py migrate
轉到http:// localhost:8000 / admin / ,然后單擊站點ID,將example.com更改為http:// localhost:8000 (如果您已經處於生產級別,則可以只使用頁面的IP或域。)
保存該應用程序后,我們准備使用Facebook登錄。 將這些模板標記放在要讓用戶登錄的html頂部。
{% load socialaccount %}
{% providers_media_js %}
您可以在要登錄按鈕的位置寫上此確切位置
<a href="{% provider_login_url "facebook" method="js_sdk" %}">Login Button image</a>
這會將您的請求發送到處理您的登錄過程的帳戶/登錄頁面。
參考: https : //medium.com/@jinkwon711/django-allauth-facebook-login-b536444cbc6b
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.