django social-authがインストールされていて(omabから)、ユーザはデータベースに保存したい電子メールアドレスを持っていますが、ユーザがログインするとfacebookからsocial-authを使用して、彼らの電子メールはfacebookアカウントにあるものに置き換えられます。私は設定がデフォルトであるかどうかわからないので、この動作を停止する方法を見つけることができません。django social-authでユーザの電子メールアドレスを設定しない方法
9
A
答えて
5
私はpipelineにその責任が
social_auth.backends.pipeline.user.update_user_details
で、それを見つけた私はパイプラインからそれを削除し、現在のメールアドレスと名前などの詳細を埋めるために、ユーザに委ねられています。
3
誰かを助けることができるように私の解決策を投稿しています(ユーザーの詳細を更新し、上書きしないでください)。 pipeline.user.update_user_details
に基づいて、私は次のようにコード化された:
def fill_user_details(backend, details, response, user, is_new=False, *args,
**kwargs):
"""Fills user details using data from provider, without overwriting
existing values.
backend: Current social authentication backend
details: User details given by authentication provider
response: ?
user: User ID given by authentication provider
is_new: flag
source: social_auth.backends.pipeline.user.update_user_details
"""
# Each pipeline entry must return a dict or None, any value in the dict
# will be used in the kwargs argument for the next pipeline entry.
#
# If any function returns something else beside a dict or None, the
# workflow will be cut and the value returned immediately, this is useful
# to return HttpReponse instances like HttpResponseRedirect.
changed = False # flag to track changes
for name, value in details.iteritems():
# do not update username, it was already generated
if name in (USERNAME, 'id', 'pk'):
continue
# set it only if the existing value is not set or is an empty string
existing_value = getattr(user, name, None)
if value is not None and (existing_value is None or
not is_valid_string(existing_value)):
setattr(user, name, value)
changed = True
# Fire a pre-update signal sending current backend instance,
# user instance (created or retrieved from database), service
# response and processed details.
#
# Also fire socialauth_registered signal for newly registered
# users.
#
# Signal handlers must return True or False to signal instance
# changes. Send method returns a list of tuples with receiver
# and it's response.
signal_response = lambda (receiver, response): response
signal_kwargs = {'sender': backend.__class__, 'user': user,
'response': response, 'details': details}
changed |= any(filter(signal_response, pre_update.send(**signal_kwargs)))
# Fire socialauth_registered signal on new user registration
if is_new:
changed |= any(filter(signal_response,
socialauth_registered.send(**signal_kwargs)))
if changed:
user.save()
9
あなたはSOCIAL_AUTH_PROTECTED_USER_FIELDSを試してみましたか? :)マニュアルから
:
にupdate_user_detailsパイプラインプロセッサは、電子メールなど ユーザーオブジェクト、上の特定のフィールドを設定します。 SOCIAL_AUTH_PROTECTED_USER_FIELDS = [「メール」、]
をまた、より多くの余分な値があれば保存されます:あなたが唯一の 新しく作成されたユーザーに対して設定したいフィールドのリストに設定します定義された。この の設定の詳細は、以下のOpenIdとOAuthセクションに記載されています。
関連する問題
- 1. Firebaseユーザの電子メールアドレスをIDで取得する方法
- 2. 電子メールアドレスでユーザを検索
- 3. は「[email protected]」のような電子メールアドレス、指定したメールアドレス
- 4. ASP.NETでユーザー名として電子メールアドレスを設定するメンバーシッププロバイダ
- 5. PHP Pear Mail Queueでバウンスバック電子メールアドレスを設定する方法は?
- 6. PHPメール機能で変数電子メールアドレスを設定する方法
- 7. Firebaseの電子メールアドレスの確認方法
- 8. django-rest-authで登録:allauth設定を設定する場所(電子メールの確認と必要なユーザ名)
- 9. 設定に電子メールを送る方法.MANAGER in django recipient_list
- 10. メールサーバーが受信者の電子メールアドレスを決定する方法
- 11. Angular ng-pattern - 電子メールアドレスではない
- 12. BlackBerryシミュレータで電子メールアドレスを設定する
- 13. PostgreSQLで有効な電子メールアドレスを確認する方法は?
- 14. (電子メールアドレス)
- 15. Powermail電子メールアドレス
- 16. djangoの電子メールのユーザ名とパスワード
- 17. Ubuntu - cronジョブの 'from'電子メールアドレスを設定する
- 18. ユーザのプライマリ電子メールアドレスを取得するmysql phpのベストプラクティス
- 19. Djangoはユーザーの電子メールアドレスを更新します
- 20. Javaを使用しているユーザの電子メールアドレスのカレンダーにアクセスする
- 21. WordPressユーザーに電子メールアドレスを設定する
- 22. Jmeterユーザー定義変数で電子メールアドレスを定義する方法は?
- 23. Azure AD B2C - 複数の電子メールアドレスの代わりに1つの電子メールアドレスを設定する方法はありますか
- 24. PHPを使用して特定の電子メールアドレスに電子メールを送信する方法は?
- 25. 無効な電子メールアドレスからファイルを消去する方法
- 26. podioアイテムの電子メールアイテムの電子メールアドレスを取得する方法は?
- 27. 電子メールアドレスtld regex
- 28. jsonPathと電子メールアドレス
- 29. 電子:電子ビルダー設定
- 30. 電子メールアドレスのドメインをフォームで検証する方法は?
こんにちは。私がDjangoアプリケーションに上記の投稿したソリューションを実装するにはどうすればいいですか?上記のコードはどこにあるべきですか? –
@ArpitRaiあなたが 'social-auth'の比較的新しいバージョンを持っているなら、私はZheの答え(http://stackoverflow.com/a/16267281/556413) – glarrain