2009-08-25 6 views
11

J'ai un projet ASP.NET MVC, et j'aimerais avoir un LoginUrl différent pour différentes zones du site. Selon la zone du site, différents types d'informations d'identification sont entrés.LoginUrl différent pour différentes URL avec ASP.NET MVC et l'authentification par formulaires

http://host.com/widget/home doit rediriger l'utilisateur vers http://host.com/widget/logon.

http://host.com/admin/home doit rediriger l'utilisateur vers http://host.com/admin/logon.

Jusqu'à présent, la meilleure solution que je suis venu avec, est d'avoir les formes Auth loginUrl = "~/compte/Ouverture de session" dans le web.config:

<authentication mode="Forms"> 
     <forms loginUrl="~/Account/LogOn" timeout="2880"/> 
    </authentication> 

Dans le contrôleur pour le compte:

public ActionResult LogOn() 
{ 
    //redirect depending on the returnUrl? 
    string returnUrl = ControllerContext.Controller.ValueProvider["ReturnUrl"].AttemptedValue; 
    if (returnUrl.StartsWith("/widget")) 
    { 
     return Redirect(string.Format("/widget/Logon?ReturnUrl={0}", returnUrl)); 
    } 
    if (returnUrl.StartsWith("/admin")) 
    { 
     return Redirect(string.Format("/admin/Logon?ReturnUrl={0}", returnUrl)); 
    } 
    return View(); 
} 

Existe-t-il une meilleure façon de procéder?

+1

BTW: vous pouvez simplement mettre returnUrl comme un paramètre de chaîne à la méthode: LogOn (string returnUrl) –

Répondre

1

Je sais que vous pouvez avoir des fichiers web.config distincts dans les sous-dossiers d'un site Web, de sorte que si vous aviez des pages .aspx réelles dans un dossier admin /, et un web.config dans ce dossier, vous pourriez spécifier l'URL d'authentification dans ce dossier séparément. Je ne sais pas si cela fonctionne avec les routes ASP.NET MVC car vous ne disposerez probablement pas de fichiers physiques dans ces sous-dossiers, mais cela vaut la peine d'essayer.

+2

Dans les zones MVC, vous avez des web.config séparés, mais vous finirez probablement avec l'erreur si vous essayez d'ajouter le attribut d'authentification: L'utilisation d'une section enregistrée comme allowDefinition = 'MachineToApplication' au-delà du niveau de l'application est une erreur. Cette erreur peut être provoquée par un répertoire virtuel n'étant pas configuré en tant qu'application dans IIS. – Jafin

1

Ajouter un attribut Authentifier à vos actions.

Ensuite, dans global.asax, ajoutez Application_AuthenticateRequest puis examinez l'expéditeur et redirigez là où vous souhaitez que l'action se connecte.

+0

Je suis juste curieux, mais cela semble être similaire à ce que j'avais fait à l'origine, juste dans un endroit différent. Quels sont les avantages de le faire de cette façon? – mlsteeves

Questions connexes