用facebook登录后不会创建用户(可能是同名案例)

时间:2014-05-03 09:01:31

标签: python django facebook python-social-auth

我正在努力学习如何将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执行的登录。

所以我有这两个问题:

  1. 是否正确python social auth检查auth_user中是否已存在具有相同名字和姓氏的用户然后它使用该特定用户而不是创建另一个用户?
  2. 我怎样才能避免Facebook上的用户Foo Bar和Twitter上的用户Foo Bar不是同一个人的情况?

1 个答案:

答案 0 :(得分:0)

快速回答您的问题:

  1. 没有
  2. 没有必要做到这一点。
  3. 对我而言,在点击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
    

    这就是我要做的事情:

    1. 删除数据库,或删除表social_auth_usersocialauth
    2. 中的内容
    3. 转到/admin并确保您已退出
    4. 尝试再次使用Facebook登录
    5. 这次应该创建一个新的用户帐户。