我有django社交認證安裝(從omab),並且用戶有一個電子郵件地址在數據庫中,這是我想保留的,但當用戶登錄從facebook使用social-auth,他們的電子郵件被他們在facebook賬戶中的電子郵件取代。我不確定這些設置是否爲默認設置,也無法找到如何阻止此行爲。如何不設置用戶的電子郵件地址在Django社會認證
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. django註冊不能設置「從」電子郵件地址認證電子郵件
- 2. 如何跳過用戶確認使用電子郵件omniauth(社會認證)
- 3. 社會認證django:多個用戶衝突相同的電子郵件ID
- 4. 如何在Django/Pinax中設置電子郵件驗證/確認?
- 5. 蟒蛇 - 社會 - 身份驗證 - 更新電子郵件地址
- 6. Django在forms.py中驗證電子郵件地址和用戶名
- 7. Django電子郵件地址
- 8. JMeter - 如何模擬電子郵件地址和確認電子郵件地址
- 9. Javamail - 如何獲取用戶的默認電子郵件地址?
- 10. 如何驗證電子郵件地址
- 11. 電子郵件地址驗證,如何?
- 12. 如何驗證電子郵件地址
- 13. 驗證電子郵件地址而不發送電子郵件給用戶
- 14. 如何驗證電子郵件地址的用戶名?
- 15. Django:設置電子郵件的發件人地址
- 16. 如何禁用電子郵件中的默認電子郵件地址樣式?
- 17. django社交認證註冊Facebook電子郵件
- 18. Django社交認證檢查電子郵件結尾
- 19. django社交認證整合「註冊與電子郵件」
- 20. 如何在javamail中設置正確的電子郵件地址?
- 21. 在Cocoa中獲取用戶的默認電子郵件地址
- 22. 電子郵件不會去BCC地址
- 23. Powerbi用戶的電子郵件地址
- 24. 社會認證django
- 25. django的電子郵件認證
- 26. 在Dart驗證電子郵件地址?
- 27. 當點擊電子郵件地址時設置默認主題
- 28. Quickblox,發送電子郵件給新用戶以驗證電子郵件地址
- 29. 如何使用'INSTR'將值設置爲電子郵件地址?
- 30. 如何使用gomail設置回覆電子郵件地址
嗨。我如何去實現你在上面發佈在我的Django應用程序中的解決方案?上面的代碼應該去哪裏? – 2013-04-04 15:07:36
@ArpitRai如果你有一個相對較新版本的'social-auth',我建議你今天使用Zhe的答案(http://stackoverflow.com/a/16267281/556413) – glarrain 2014-04-21 21:51:23