我使用Django Social Auth(v0.7.22)通過Facebook註冊用戶,並且工作正常。在Django Social Auth管道中收集額外的用戶數據
我的疑問是如何收集額外數據爲新用戶:
- 如何檢測新用戶?
- 在哪裏存儲收集的數據(在Django會話中或通過管道
**kwargs
傳遞)?
我的管道是這樣的:
SOCIAL_AUTH_PIPELINE = (
'social_auth.backends.pipeline.social.social_auth_user',
'social_auth.backends.pipeline.misc.save_status_to_session',
## My customs ...
'myapp.pipeline.load_data_new_user',
'myapp.pipeline.handle_new_user',
'myapp.pipeline.username',
##
'social_auth.backends.pipeline.user.create_user',
'social_auth.backends.pipeline.social.associate_user',
'social_auth.backends.pipeline.social.load_extra_data',
'social_auth.backends.pipeline.user.update_user_details',
)
的第一個自定義函數僅僅收取的Facebook個人資料圖片:
def load_data_new_user(backend, response, user, *args, **kwargs):
if user is None:
if backend.name == "facebook":
try:
url = "http://graph.facebook.com/%s/picture?width=200&height=200&redirect=false" % response['id']
data = json.loads(urllib2.urlopen(url).read())['data']
return {'avatar': data}
except StandardError:
return {'avatar': None}
else:
raise ValueError()
我的疑惑:
- 我檢查,如果
user
是None
用於檢測新用戶(不確定是否我可以假設)。 - 我將頭像元數據存儲在管道的
**kwargs
而不是使用會話,它可以嗎?我應該什麼時候使用會話。
其他自定義功能基於Matias Aguirre example,並使用會話 來存儲新用戶的用戶名。
def handle_new_user(request, user, *args, **kwargs):
if user is None and not request.session.get('saved_username'):
return HttpResponseRedirect('/form/')
def username(request, user, *args, **kwargs):
if user is not None:
username = user.username
else:
username = request.session.get('saved_username')
return {'username': username}
所以,我不確定何時使用會話或「正確的成語」來解決我的問題。 在此先感謝。
您可以通過檢查傳遞給流水線條目的'is_new'標誌來檢測用戶是否是新的。 – omab 2013-04-12 17:26:20