我正在使用 Django Social Auth (v0.7.22) 通过 Facebook 注册用户,并且工作正常。
我的疑问是如何为新用户收集额外的数据:
- 如何检测新用户?
- 将收集到的数据存储在哪里(在 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 示例,并使用会话存储新用户的用户名。
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}
所以,我不确定何时使用会话或“正确的成语”来解决我的问题。提前致谢。