簡體   English   中英

調試AllAuth:盡管連接成功,社交帳戶仍無法登錄用戶

[英]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 Facebook登錄

首先,安裝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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM