Hello, I'm using DSA for registering users via Facebook, and that is working OK.
My doubt is how to collect extra data for new users:
1. How to detect a new user?
2. 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:
try:
data = json.loads(urllib2.urlopen(url).read())['data']
return {'avatar': data}
except StandardError:
return {'avatar': None}
else:
raise ValueError()
My doubts:
1. I'm checking if user is None for detecting new users (not sure if it's OK to assume that).
2. I'm storing the avatar metadata in the pipeline's **kwargs instead of use sessions, is it OK? When should I use session.
The other custom functions are based on the Matias Aguirre example, and use sessions
for storing the username of new users.
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')
print username
return {'username': username}
So, I'm not sure when to use sessions or the "correct idiom" for resolve my problem.
Thanks in advance.