Sto lavorando a un'applicazione mvc .net e sto utilizzando l'autenticazione dei moduli. Voglio reindirizzare l'utente alla pagina che ha richiesto dopo che è stato autenticato. Qualsiasi aiuto sarebbe apprezzato.Reindirizza alla pagina richiesta dopo l'autenticazione
risposta
Se si crea un progetto di applicazione Internet ASP.NET MVC 3 o 4, verrà fornito un esempio completo di come utilizzare l'URL di ritorno durante l'autenticazione.
Quando si aggiunge AuthorizeAttribute a un controller per forzare l'autenticazione, reindirizzerà l'utente al metodo di accesso e aggiungerà automaticamente il parametro returnUrl. Da lì, è necessario tenere traccia di come si mostra il tuo form di login:
public ActionResult Login(string returnUrl)
{
ViewBag.ReturnUrl = returnUrl;
return View();
}
e poi aggiungerlo alla collezione percorso del proprio form di login:
@*//ReSharper disable RedundantAnonymousTypePropertyName*@
@using (Html.BeginForm(new { ReturnUrl = ViewBag.ReturnUrl })) {
@*//ReSharper restore RedundantAnonymousTypePropertyName*@
}
Una volta che l'utente invia il login, assumendo si autenticano correttamente, ti basta reindirizzare a ReturnURL:
[HttpPost]
public ActionResult Login(LoginModel model, string returnUrl)
{
return RedirectToLocal(returnUrl);
}
la parte più difficile è tenere traccia del ReturnUrl attraverso la sequenza GET/POST.
Se si desidera vedere come funziona AuthorizeAttribute, il post this StackOverflow mostra l'impostazione returnUrl con la richiesta originale.
È inoltre necessario verificare che returnUrl sia realmente un URL locale o che si risulti vulnerabile agli attacchi di reindirizzamento aperti. RedirectToLocal() è un metodo di supporto dal modello di applicazione 4 Internet MVC che fa questo di convalida:
private ActionResult RedirectToLocal(string returnUrl)
{
if (Url.IsLocalUrl(returnUrl))
{
return Redirect(returnUrl);
}
else
{
return RedirectToAction("Index", "Home");
}
}
ringrazio molto, è ora di lavoro :) –
@HediNaily: un punto per ricordare non è fidarsi ReturnURL ea controllalo prima di usarlo per reindirizzare l'utente –
@ mohsen.d. RedirectToLocal() è un helper MVC 4 incluso nel modello di applicazione Internet che convalida l'URL prima del reindirizzamento. Lo aggiungerò alla risposta per quelli senza il metodo di supporto. – mfanto