Rediriger à la page demandée après l'authentification
Je suis en train de travailler sur un mvc .net application et je suis en utilisant l'authentification par formulaires. Je veux rediriger l'utilisateur vers la page qu'il a demandé après qu'il s'authentifié. Toute aide serait appréciée.
OriginalL'auteur | 2012-10-30
Vous devez vous connecter pour publier un commentaire.
Si vous créez un ASP.NET MVC 3 ou 4 Application Internet du projet, il va avoir un exemple complet d'utilisation de retourner url lors de l'authentification.
Lorsque vous ajoutez le AuthorizeAttribute à un contrôleur pour forcer l'authentification, il va rediriger l'utilisateur vers votre méthode de Connexion, et ajouter automatiquement les returnUrl paramètre. À partir de là, vous avez besoin de garder une trace de ce que vous montrez votre formulaire de login:
puis l'ajouter à votre formulaire de login de l'itinéraire de la collection:
Une fois que l'utilisateur soumet le login, en supposant qu'ils s'authentifier correctement, vous serez rediriger vers returnUrl:
La partie la plus difficile est de garder la trace de la ReturnUrl à travers le GET/POST séquence.
Si vous voulez voir comment les AuthorizeAttribute œuvres, cette StackOverflow post montre paramètre returnUrl avec la demande initiale.
Vous devez également vous assurer que vous validez returnUrl est vraiment une url locale, ou vous devenez vulnérable à ouvrir la redirection des attaques. RedirectToLocal() est une méthode d'assistance à partir de la MVC 4 Internet le modèle d'Application qui n'cette validation:
un point à oublier est de ne pas faire confiance returnUrl et de le vérifier avant de l'utiliser pour rediriger l'utilisateur
D'accord. Le RedirectToLocal() est un MVC 4 helper inclus avec l'Application Internet modèle qui valide l'URL avant de la rediriger. Je vais l'ajouter à la réponse pour ceux sans l'aide de la méthode.
Une chose importante pour ceux ReSharper utilisateurs, ReSharper va vous dire que vous pouvez retirer de l'
ReturnUrl =
partie de laHtml.BeginForm
depuis un nom explicite n'est pas nécessaire. Dans ce cas, il est nécessaire.OriginalL'auteur mfanto