Mein Projekt basiert auf der MVC 5-Projektvorlage von Visual Studio 2013 (individuelle Benutzerkontooption). Ich habe mich auf die Standardmethode für das Anmelden und Abmelden für meine Benutzer verlassen. Aber ich bin mir nicht sicher, was ich getan habe, irgendwann können sich Benutzer nicht mehr abmelden, sie können sich jedoch als ein anderer Benutzer anmelden.MVC AuthenticationManager.SignOut() signiert nicht
Dies ist die Standardabmeldeverfahren Konto-Controller
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult LogOff()
{
AuthenticationManager.SignOut();
return RedirectToAction("Index", "Home");
}
private IAuthenticationManager AuthenticationManager
{
get
{
return HttpContext.GetOwinContext().Authentication;
}
}
Dies ist der Standard _LoginPartial.cshtml Ansicht, die Benutzernamen des Benutzers zeigt.
@using Microsoft.AspNet.Identity
@if (Request.IsAuthenticated)
{
using (Html.BeginForm("LogOff", "Account", FormMethod.Post, new { id = "logoutForm", @class = "navbar-right" }))
{
@Html.AntiForgeryToken()
<ul class="nav navbar-nav navbar-right">
<li>
@Html.ActionLink("Hello " + User.Identity.GetUserName() + "!", "Index", "Manage", routeValues: null, htmlAttributes: new { title = "Manage" })
</li>
<li><a href="javascript:document.getElementById('logoutForm').submit()">Log off</a> </li>
</ul>
}
}
else
{
<ul class="nav navbar-nav navbar-right">
<li>@Html.ActionLink("Register", "Register", "Account", routeValues: null, htmlAttributes: new { id = "registerLink" })</li>
<li>@Html.ActionLink("Log in", "Login", "Account", routeValues: null, htmlAttributes: new { id = "loginLink" })</li>
</ul>
}
Wenn der Benutzer abmeldet, es Benutzer auf die Login-Seite leitet, aber Benutzernamen des Benutzers wird noch gezeigt, was bedeutet, dass sie aus nicht unterzeichnet haben. Und die URL im Browser zeigt http://localhost/Account/Login?ReturnUrl=%2FAccount%2FLogOff
Es bringt den Benutzer nicht zurück zur Indexseite von Home. Also meine Vermutung ist, dass etwas bei der Anweisung AuthenticationManager.SignOut(); passiert ist. Ich bin verwirrt, weil ich nichts an den Account Controller geändert habe.
Jede Leitung würde sehr geschätzt werden.
Mein Problem ist bei 'SignOut()' nicht aufgetreten. Das liegt daran, dass ich '[authorize (Role =" admin ")]' über dem Controller hinzugefügt habe, was ich nicht bemerkt habe. Aber ich bin sicher, dass es vielen Leuten helfen wird, deren Problem tatsächlich bei "SignOut()" mit der Owin-Authentifizierung aufgetreten ist. – Ramesisiii
@ Ramesisiii "Das liegt daran, dass ich [authorize (Role =" admin ")] hinzugefügt habe" Danke, dass du das erwähnt hast. Ich habe viele Stunden damit verbracht, nicht zu wissen, was dazu führte, dass meine Methode logout() von einem Konto, das kein Administrator ist, nicht aufgerufen werden konnte. +1 für dich. – CB4