Je construis une application avec python-social-auth pipline personnalisée pour la connexion via facebook. La situation est si simple, je dois rediriger l'utilisateur de la fonction non-vue à l'URL avec paramètre.Django rediriger/appeler avec le paramètre d'une autre fonction
Voici mes urls connexes:
url(r'^.*', login, name = 'login'),
url(r'^logout/.*', logout, name = 'FBAuth.views.logout'),
url(r'^/new_user/.*', login, {'new_user':1}, name = 'new_user'),
url(r'^succeeded/.*', login, {'new_user':2}, name = 'succeeded'),
de views.py:
def login(request, new_user=None):
logger.debug("I'm in login view, new_user = %s", new_user)
message = 'Welcome to application!'
if new_user:
if new_user == 1: #new one
message = 'Wellcome to our app! Thanks for registration'
else:
if new_user == 2: #loggined
message = "Successfully logged in"
else:
message = new_user
context = RequestContext(request, {
'request': request, 'user': request.user, 'message' : message})
return render_to_response('login.html', context_instance=context)
custom.py:
def check_if_exists(strategy, request, *args, **kwargs):
login_type = strategy.request.GET.get('login_type')
if kwargs['is_new']:
...
some code
...
else:
#if login_type == 2:
#raise AuthAlreadyAssociated #need to add message
new_user = 1
#return redirect('/new_user/')
#return redirect('/new_user/', {'new_user' : new_user})
return login(new_user=1)
#return redirect(reverse('new_user'))
#reverse('FBAuth.views.login', kwargs={'new_user' : new_user}) #, new_user=new_user) #, args =(new_user,))
#reverse(redirect_uri, args=(backend,))
return None
Voici mon pipeline auth:
SOCIAL_AUTH_PIPELINE = (
'social.pipeline.social_auth.social_details',
'social.pipeline.social_auth.social_uid',
'social.pipeline.social_auth.auth_allowed',
'social.pipeline.social_auth.social_user',
'FBAuth.facebook.check_if_exists',
'social.pipeline.user.get_username',
'social.pipeline.user.create_user',
'social.pipeline.social_auth.associate_user',
'social.pipeline.social_auth.load_extra_data',
'social.pipeline.user.user_details',
)
Les pipelene cals par url:
href="{% url 'social:begin' 'facebook' %}?next={{ request.path }}&login_type={{1}}"
j'ai essayé un million de variantes, rien ne fonctionne. La redirection échoue toujours ou je reçois new_user = None à mon avis.
S'il vous plaît, aidez-moi à trouver un moyen de passer mon paramètre.
Note: J'ai aussi essayé:
return redirect('/new_user/1/')
et
return redirect('/new_user/?new_user=1/')
pour l'url:
url(r'^/new_user/(?P<new_user>)/$', login, name = 'new_user'),
La page est ouverte, mais aucun message (new_user à None)
Qu'est-ce qui appelle cette fonction 'check_if_exists'? –
Cela fait partie du pipeline d'authentification de python-social-auth, il appelle de la fonction suivante, je vais l'ajouter à la description. –
Avec le code actuel (c'est-à-dire avec 'return login (new_user = 1)'), que se passe-t-il? Et que devrait-il se passer à la place exactement? –