Wenn mein AuthorizeAttribute
aufgerufen wird, sendet es die Seite zur Anmeldung wie es sollte. Aber wenn die Anmeldung abgeschlossen ist, geht es nach Home/Index. Das ist super nervig. Wie kann ich das verhindern? Da der Code-Pfad nie in meinen Controller gelangt, habe ich keine Kontrolle darüber, was er macht.Wie füge ich Informationen in den Filterkontext des AuthorizeAttribute - HandleUnauthorizedRequest ein
Antwort
Wenn Sie mithilfe der Formularauthentifizierung auf eine Seite zugreifen, für die eine Authentifizierung erforderlich ist, leitet ASP.NET Sie zur Anmeldeseite weiter und übergibt die ReturnUrl als Parameter.
Sie müssen also nur diesen Parameter verwenden, um den Benutzer an die Stelle zurückzuversetzen, an der er zuvor war.
public ActionResult Login(string username, string pass, string returnUrl)
{
// code to authenticate user here...
if (!string.IsNullOrEmpty(returnUrl))
return Redirect(returnUrl);
return RedirectToAction("Index", "Home");
}
Sie möchten vielleicht auch FormsAuthentication.RedirectFromLoginPage
Redirects an authenticated user back to the originally requested URL or the default URL.
https://msdn.microsoft.com/en-us/library/ka5ffkce(v=vs.110).aspx
Hinweis mit berücksichtigen, dass diese Methode aufrufen wird auch das Authentifizierungscookie ausgeben, dass Sie bereits tun könnte. Du musst also überprüfen, ob du das nicht zweimal tust.
Edit: Siehe https://stackoverflow.com/a/1206728/722778
Sie generieren Ihre Form vielleicht ein Controller eine Aktion (zB Html.BeginForm ("Logon", "Account") Angabe
In diesem Fall versuchen Sie, mit nur das? Ihrer Ansicht nach:
Html.BeginForm()
Oder die ReturnUrl Parameter yourselve vorbei:
Html.BeginForm("LogOn", "Account", new {ReturnUrl = Request.QueryString["ReturnUrl"] })
Das Problem ist, dass die Login-Funktion niemals die returnUrl empfängt, wenn sie umgeleitet werden, und ich kann nicht herausfinden, wie ich sicherstellen kann, dass sie übergeben wird. –
Bitte sehen Sie meine letzte Änderung – hernant