Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用facebook登录后不会创建用户(可能是同名情况)_Python_Django_Facebook_Python Social Auth - Fatal编程技术网

Python 使用facebook登录后不会创建用户(可能是同名情况)

Python 使用facebook登录后不会创建用户(可能是同名情况),python,django,facebook,python-social-auth,Python,Django,Facebook,Python Social Auth,我试图学习如何将python social auth集成到django项目中 这似乎是可行的,因为我可以登录到我的测试应用程序,但它表明用户从未存储到数据库中,我不明白为什么,因为我没有收到任何错误 这是我的密码 INSTALLED_APPS = ( ... 'social.apps.django_app.default', 'messaging' ) AUTHENTICATION_BACKENDS = ( 'social.backends.facebook.F

我试图学习如何将python social auth集成到django项目中

这似乎是可行的,因为我可以登录到我的测试应用程序,但它表明用户从未存储到数据库中,我不明白为什么,因为我没有收到任何错误

这是我的密码

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时创建的第一个管理员用户与我用来测试应用程序的facebook帐户名和姓相同。我认为它不会被使用,必须创建另一个用户,但在检查数据库时,我看到
auth\u用户。最后一次登录
会根据使用facebook执行的登录进行相应更新

所以我有两个问题:

  • python social auth检查auth_user中是否已经存在同名用户,然后使用该特定用户而不是创建另一个用户,这是否正确
  • 我怎样才能避免facebook上的用户Foo Bar和Twitter上的用户Foo Bar不是同一个人

  • 快速回答您的问题:

  • 没有
  • 实现这一点不需要任何东西
  • 在我看来,您似乎是在单击“使用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\u auth\u usersocialauth
  • 转到
    /admin
    并确保您已注销
  • 再次尝试登录Facebook
  • 这次应该创建一个新的用户帐户