在登录表单中单击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>
答案 0 :(得分:5)
首先,安装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 admin中注册我们的网站ID和社交应用程序 先做迁移&amp;的runserver
$(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