2010-12-08 4 views
0

J'ai une question similaire à celle -
Conditional login redirect in DjangoDjango redirige le bon chemin?

Mais je ne pouvais pas comprendre comment obtenir le résultat de réponses là-bas.

Je suis relativement nouveau à django. J'ai réutilisé ce code quelque part, qui redirige l'utilisateur vers la page de connexion. Mais après la connexion, je me rends toujours à la page de démarrage/home de l'utilisateur. Je veux qu'ils voient la page qu'ils ont vraiment demandée, et non la page d'accueil de l'utilisateur tout le temps. Pouvez-vous me dire quoi et où je peux faire le changement, il devrait être où j'utilise la fonction «rediriger». Je devrais probablement enregistrer une variable de session et le faire mais pas tout à fait le point de départ. Des pensées?

est sous le code -

def view_or_basicauth(view, request, test_func, realm = "", *args, **kwargs): 
    if test_func(request.user): # Already logged in, just return the view. 
     return view(request, *args, **kwargs) 

    # They are not logged in. See if they provided login credentials 
    if 'HTTP_AUTHORIZATION' in request.META: 
     auth = request.META['HTTP_AUTHORIZATION'].split() 
     if len(auth) == 2: 
      # NOTE: We are only support basic authentication for now. 
      if auth[0].lower() == "basic": 
       uname, passwd = base64.b64decode(auth[1]).split(':') 
       user = authenticate(username=uname, password=passwd) 
       if user is not None: 
        if user.is_active: 
         login(request, user) 
         request.user = user 
         return view(request, *args, **kwargs) 

    # Either they did not provide an authorization header or something in the authorization attempt failed. Send a 401 back to them to ask them to authenticate. 
    key = request.path.split('/') 
    if len(key) > 1: 
     base_url = request.get_host() 
     return redirect('https://' + base_url + '/login/') 

    s = '401 Unauthorized' 
    response = HttpResponse(s) 
    response.status_code = 401 
    response['Content-Length'] = '%d' % len(s) 
    response['WWW-Authenticate'] = 'Basic realm="%s"' % realm 
    return response 
+0

Vous ne devriez normalement pas utiliser l'authentification de base. À moins d'être cryptées par SSL, les informations d'identification sont transférées sur * chaque * demande en * texte clair *. C'est beaucoup trop vulnérable pour la plupart des sites. 'django.contrib.auth' (http://docs.djangoproject.com/fr/dev/topics/auth/) fournit une solution basée sur les sessions, idéale pour la majorité des utilisateurs, ou utilise django-openid (https://github.com/simonw/django-openid) – SingleNegationElimination

Répondre

0

passer l'URL en tant que paramètre GET dans la redirection, et ont la cible redirect les rediriger après qu'elles sont entrées dans leurs lettres de créance.

+0

Je suis désolé, mais je n'ai pas compris votre réponse car je suis un nouvel utilisateur django. Où dois-je passer l'URL? et comment pourrais-je le rediriger? Je vous remercie! – Sujit

1

Il est assez simple:

Ajouter un paramètre GET à votre ligne de redirection afin que votre vue de connexion sait d'où vient votre utilisateur. Cela peut être n'importe quoi, mais j'utilise "?redirect=myurl".

Dans votre vue de connexion: vérifiez l'existence de cette clé (redirect) dans GET lors de la connexion réussie. S'il existe, rediriger vers la valeur.

d'abord modifier votre ligne de redirection:

# add a GET parameter to your redirect line that is the current page 
return redirect('https://' + base_url + '/login/?redirect=%s' % request.path) 

Alors à votre avis de connexion, il suffit de cocher pour votre variable GET et redirigent à cette valeur si elle existe.

# modify the login view to redirect to the specified url 
def login(request): 
    # login magic here. 

    if login_successful: 
     redirect = request.GET.get('redirect') # get url 

     if redirect: 
      # redirect if a url was specified 
      return http.HttpResponseRedirect(redirect) 

     # otherwise redirect to some default 
     return http.HttpResponseRedirect('/account/home/') 
    # ... etc 
+0

avez-vous déjà essayé cela? –

Questions connexes