I'm using Django Social Auth (v0.7.22) for registering users via Facebook, and that is working OK.
My doubt is how to collect extra data for new users:
- How to detect a new user?
- Where to store the collected data (in the Django session or pass it through pipeline
**kwargs
)?
My pipeline looks like:
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',
)
The first custom function just collect the Facebook profile picture:
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()
My doubts:
- I'm checking if
user
isNone
for detecting new users (not sure if it's OK to assume that). - I'm storing the avatar metadata in the pipeline's
**kwargs
instead of use sessions, is it OK? When should I use session.
その他のカスタム関数は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}
そのため、問題を解決するためにセッションまたは「正しいイディオム」をいつ使用するかわかりません。前もって感謝します。