web-dev-qa-db-ja.com

python Facebookでソーシャル認証を使用してユーザーの電子メールを取得し、保存する方法

Djangoに python-social-auth を実装しようとしています。

ユーザーにFacebookで認証して、メールを保存してもらいたい。

ユーザーを認証することはできますが、電子メールの拡張アクセス許可がFacebook認証ボックスに表示されず、電子メールがデータベースに保存されません。

Settings.pyには、次のようなものがあります。

SOCIAL_AUTH_FACEBOOK_KEY='xxx'
SOCIAL_AUTH_FACEBOOK_SECRET='xxx'
FACEBOOK_EXTENDED_PERMISSIONS = ['email']

AUTHENTICATION_BACKENDS = (
    'social.backends.facebook.FacebookOAuth2',
    'social.backends.email.EmailAuth',
    'Django.contrib.auth.backends.ModelBackend',
)

LOGIN_URL = '/login/'
LOGIN_REDIRECT_URL = '/done/'
LOGOUT_REDIRECT_URL = '/'
URL_PATH = ''
SOCIAL_AUTH_STRATEGY = 'social.strategies.Django_strategy.DjangoStrategy'
SOCIAL_AUTH_STORAGE = 'social.apps.Django_app.default.models.DjangoStorage'

SOCIAL_AUTH_PIPELINE = (
    'social.pipeline.social_auth.social_details',
    'social.pipeline.social_auth.social_uid',
    'social.pipeline.social_auth.auth_allowed',
    'social.pipeline.social_auth.social_user',
    'social.pipeline.user.get_username',
    'social.pipeline.social_auth.associate_by_email',
    # 'users.pipeline.require_email',
    'social.pipeline.mail.mail_validation',
    'social.pipeline.user.create_user',
    'social.pipeline.social_auth.associate_user',
    'social.pipeline.social_auth.load_extra_data',
    'social.pipeline.user.user_details'
)

Facebookのダイアログボックス...

enter image description here

どうすればこれを解決できますか?

16
2083

Facebook LoginAPIにいくつかの変更を加えた後-FacebookのGraphAPI v2.4メールを取得するには、これらの行を追加する必要があります

SOCIAL_AUTH_FACEBOOK_SCOPE = ['email']
SOCIAL_AUTH_FACEBOOK_PROFILE_EXTRA_PARAMS = {
    'fields': 'id,name,email', 
}
48
shakti singh

問題はFACEBOOK_EXTENDED_PERMISSIONSの使用にあると思います。

http://python-social-auth.readthedocs.org/en/latest/backends/facebook.html#oauth2 によると、次を使用する必要があります。

SOCIAL_AUTH_FACEBOOK_SCOPE = ['email']

14
veroxii

これをsettings.pyファイルに追加します

SOCIAL_AUTH_FACEBOOK_SCOPE = ['email']
0
endur

テストサイトでやっていますか?

ドキュメントをもう一度お読みください:[ https://python-social-auth.readthedocs.io/en/latest/backends/facebook.html#oauth2] [1]

それは言う:

FacebookのセットアップページでリダイレクトURLを定義する場合は、 http://127.0.0.1:80 または http:// localhost:80 を定義しないでください。テスト時に機能しない

0
Rishabh