demande non autorisée ne redirige pas à la page de connexion avec le paramètre de chaîne de requête returnUrl

StackOverflow https://stackoverflow.com/questions/4478570

Question

Configuration

Dans mon application MVC3, MembersController est décorée avec un attribut [Authorize].

MembersController a une action appelée MaPage. En raison de l'attribut Autorisez sur le contrôleur, MaPage ne peut être demandée par les utilisateurs autorisés.

Problème

Lorsqu'un utilisateur essaie non autorisés à la demande / Membres / MaPage ils sont correctement redirigés vers la page de connexion.

Cependant, le paramètre ReturnUrl n'est pas passé dans la page de connexion, alors quand les authentifie l'utilisateur, ils sont pris à la page par défaut (Appelons it / Membres / Accueil) au lieu de / Membres / MaPage.

Question

Pourquoi?

Dans une autre application, développée en MVC2, les paramètres QS returnUrl est là et fonctionne comme prévu.

Autres questions:

L'attribut est ignoré l'autoriserait lors de la décoration et les deux contrôleurs actions.

Résolution:

Les articles de web.config pas correctement mis à jour entre .NET 3.5 et .NET 4. Voir les réponses ci-dessous.

Était-ce utile?

La solution

@Marcind me mettre sur la bonne voie, la réponse de @Darin Dimitrov très instructif du processus impliqué.

Diagnostic

Il semble que la question était liée à un web.config que je ne l'ai pas mettre à jour correctement lors de la fusion un Web Forms existants .NET 3.5 app à une application .NET 4.0. Je ne me souviens pas comment je suis allé à ce sujet.

Quoi qu'il en soit, en comparant le web.config de mon application avec une nouvelle MVC 3 web.config, j'ai pu trouver les bits supplémentaires qui ne devraient pas avoir été là, à gauche au-dessus de 3,5 jours.

Résolution:

Le problème a été résolu en corrigeant les bits dans la dans le web.config, ainsi que la balise.

Autres problèmes causés par ceci:

Une autre question provoquée par c'est le fait que si je décore un contrôleur avec l'attribut Autorisez, il a été ignoré, de sorte que le contrôleur a essayé d'informations processus basé sur l'utilisateur actuel, que de toute évidence était nulle, de sorte que toutes sortes d'exceptions étaient tiré.

Autres conseils

Il fonctionne pour moi. J'ai créé un nouveau projet en utilisant le ASP.NET MVC 3 RC2, modèle par défaut, a ajouté une MembersController, il décorées avec l'attribut [Authorize], exécutez l'application, demandé /members/index, a été redirigé vers /Account/LogOn?ReturnUrl=%2fmembers%2findex, connecté, a été redirigé vers /members/index. Il doit y avoir quelque chose de mal d'autre avec votre code.

Voici comment cela fonctionne:

  • Les contrôles d'attributs de [Authorize] si l'utilisateur est authentifié et si elle ne l'est pas retourne 401 code d'état.
  • FormsAuthenticationModule qui fait partie de authentification ASP.NET et forme des poignées 401 intercepte le code d'état et redirige vers la page de connexion par le paramètre annexant ReturnUrl à la demande qui indique la demande initiale.

Le module FormsAuthenticationModule n'est pas spécifique à ASP.NET MVC, ce sont des choses ASP.NET standard

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top