我正在努力学习如何将python social auth集成到django项目中。
它似乎有效,因为我可以登录我的测试应用程序,但是它会断言用户永远不会存储到数据库中,我无法理解为什么,因为我没有收到任何错误。
这是我的conf
INSTALLED_APPS = (
...
'social.apps.django_app.default',
'messaging'
)
AUTHENTICATION_BACKENDS = (
'social.backends.facebook.FacebookOAuth2',
'social.backends.email.EmailAuth',
'django.contrib.auth.backends.ModelBackend',
)
SOCIAL_AUTH_FACEBOOK_KEY='XX'
SOCIAL_AUTH_FACEBOOK_SECRET='YYY'
FACEBOOK_EXTENDED_PERMISSIONS = ['email']
SOCIAL_AUTH_FACEBOOK_SCOPE = ['email']
LOGIN_URL = '/login/'
LOGIN_REDIRECT_URL = '/home/'
LOGOUT_REDIRECT_URL = '/'
URL_PATH = ''
SOCIAL_AUTH_STRATEGY = 'social.strategies.django_strategy.DjangoStrategy'
SOCIAL_AUTH_STORAGE = 'social.apps.django_app.default.models.DjangoStorage'
TEMPLATE_CONTEXT_PROCESSORS = (
'django.contrib.auth.context_processors.auth',
'social.apps.django_app.context_processors.backends',
'social.apps.django_app.context_processors.login_redirect',
)
我的想法是为用户使用django默认模型,所以我没有为它定义任何扩展名。
您是否知道为何不在登录时创建用户?
更新
我注意到一些看起来很奇怪的东西,至少对我而言。执行syncdb时创建的第一个admin用户具有与我用来测试应用程序的facebook帐户相同的名字和姓氏。我认为它不会被使用,并且必须创建另一个用户,但在检查数据库时,我看到auth_user.last_login
已相应更新为使用facebook执行的登录。
所以我有这两个问题:
答案 0 :(得分:0)
快速回答您的问题:
对我而言,在点击Login with Facebook
链接之前,您似乎已使用该管理员用户登录。 python-social-auth
将获取当前登录用户并将社交帐户与其关联(如果有任何用户登录),否则它将创建一个新帐户。但是,如果社交帐户已在您的网站中使用,它将登录相关用户,或删除指示社交帐户已在使用中的例外。
您可以使用以下方式检查社交帐户的相关用户:
from social.apps.django_app.default.models import UserSocialAuth
for social in UserSocialAuth.objects.all():
print social.provider, social.user.id, social.user.username
这就是我要做的事情:
social_auth_usersocialauth
/admin
并确保您已退出这次应该创建一个新的用户帐户。