0

Ich habe eine ASP MVC 5-Anwendung und ich habe festgestellt, dass angemeldete Benutzer weiterhin auf die Registrierungs- und Anmeldeseiten zugreifen können. Ich habe auch bemerkt, dass wenn ein angemeldeter Benutzer versucht, auf eine Controller-Aktion zuzugreifen, zu der er nicht berechtigt ist, werden sie auf die Anmeldeseite umgeleitet. Dies ist verwirrend, weil der Benutzer bereits angemeldet ist.ASP MVC 5 Angemeldeter Benutzer kann immer noch auf Login- und Registrierungsseiten zugreifen?

Wie behebe ich das, so dass nicht autorisierte Redirects auf andere 401-Fehlerseite oder anzuzeigen.

Antwort

0

Bei der Anmeldung/Login-Seite können Sie angemeldet Benutzer Redirect:

// GET: /Account/Login 
[AllowAnonymous] 
public ActionResult Login(string returnUrl) 
{ 
    if (User.Identity.IsAuthenticated) 
    { 
     return RedirectToAction("Index", "Account"); 
    } 
    // ... 
} 

Und wenn Sie Rolle verwenden, können Sie die AuthorizeAttribute

[AuthorizeRole(Roles="Admin")] 
public ActionResult Admin() 
{ 
//... 
} 

AuthorizeRoleAttribute.cs
bearbeiten außer Kraft setzen : Überschreibung HandleUnauthorizedRequest

public class AuthorizeRoleAttribute : AuthorizeAttribute 
{ 
    public override void HandleUnauthorizedRequest(AuthorizationContext filterContext) 
    { 
     if (filterContext.HttpContext.User.Identity.IsAuthenticated 
      // Check if user is in roles 
      && Roles.Split(',').Any(filterContext.HttpContext.User.IsInRole)) 
     { 
      // Not in any role change view 
      filterContext.Result = new ViewResult 
      { 
       ViewName = "~/Views/Shared/UnauthorizedRole.cshtml" 
      }; 
     } 
     else{ 
      base.HandleUnauthorizedRequest(filterContext); 
     } 
    } 
} 
+0

Also im Grunde gibt es keine Möglichkeit, das vorhandene Autorize-Attribut zu überschreiben '[Autorize (Roles =" Manager, Admin ")]', so dass es richtig funktioniert. Was Ihr Sprichwort ist, ich muss mein eigenes neues Autorisierungsattribut erstellen und dieses anstelle des standardmäßigen Attributs verwenden. '[AuthorizeRole (Rollen =" Manager, Admin ")]'. – adam78

+0

Ich denke, Sie können 'IOverrideFilter' und' OverrideAuthentication' verwenden. Beachten Sie, dass Sie in MVC6 [Richtlinie] (https://leastprivilege.com/2015/10/12/the-state-of-security-in-asp-net-5-and-mvc-6-authorization/) verwenden können. . – Tonio