1

Pythonソーシャル認証を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 を実行するときに作成される最初の管理者ユーザーは、アプリケーションのテストに使用している Facebook アカウントと同じ名前と姓を持っています。もう使わないだろうし、別のユーザーを作る必要があると思っていたのですが、データベースを確認したところauth_user.last_login、facebook でのログインに合わせて更新されていました。

そこで、次の 2 つの質問があります。

  1. python social auth は、同じ名前と姓を持つユーザーが既に auth_user に存在するかどうかをチェックし、別のユーザーを作成する代わりにその特定のユーザーを使用するのは正しいですか?
  2. Facebook のユーザー Foo Bar と Twitter のユーザー Foo Bar が同一人物ではない状況を回避するにはどうすればよいですか?
4

1 に答える 1

0

質問への簡単な回答:

  1. いいえ
  2. それを達成するために必要なものは何もありません。

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. に移動して/admin、ログアウトしていることを確認します
  3. Facebookで再度ログインしてみてください

今回は、新しいユーザー アカウントを作成する必要があります。

于 2014-05-03T17:11:10.093 に答える