2017-09-01 43 views
5

单击登录表单中的Facebook登录按钮可正确显示出fb登录弹出窗口,但输入凭据后弹出窗口关闭,没有任何反应。调试AllAuth:尽管连接成功,社交帐户仍未登录用户

再次点击该按钮无需重新加载页面确认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> 
+0

我想没有必要添加任何类型的脚本在你的登录页面。并且我还可以看到代码中缺少一些设置,请检查我的答案,我已经发布了将facebook登录集成到您的网络应用程序所需的全部设置。 – Satendra

回答

5

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'}} 

ID和密钥可以在https://developers.facebook.com/创建一个 应用程序和去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导致什么。

现在您需要在设置中设置您的站点ID。PY

#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 

我们需要注册我们的网站ID和社会应用在我们的Django管理 先做迁移&的runserver

$(venv) python3 manage.py migrate 

http://localhost:8000/admin/并点击网站ID 变化example.com到http://localhost:8000(如果您已处于生产级别,则可能只是使用您网页的IP或域名。)

enter image description here

保存应用程序后,我们准备用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

相关问题