2013-10-23 10 views
24

Können Sie mir sagen, warum FormsAuthentication.SetAuthCookie(user.Name, false); nicht Request.IsAuthenticated verursacht, um wahr zu sein?Request.IsAuthenticated ist immer falsch

Hier ist mein Code:

[HttpPost] 
    public ActionResult LogIn(karcioszki.Models.UserLoginModel user) 
    { 
     if (ModelState.IsValid) 
     { 
      if (IsValid(user.Name, user.Password)) 
      { 
       FormsAuthentication.SetAuthCookie(user.Name, false); 
       return RedirectToAction("Index", "Home"); 
      } 
      else 
      { 
       ModelState.AddModelError("", "Login or password is incorrect"); 
      } 
     } 

     return View(user); 
    } 

und if-Anweisung:

@if (Request.IsAuthenticated) 
{ 
    <a href="@Href("~/")" class="active">Home</a> 
    <a href="@Href("~/Cards")">Cards</a> 
    @Html.ActionLink("Log out", "Logout", "User") 
    @Html.Encode(User.Identity.Name) 
} 

Auch mir bitte sagen, wie es funktioniert?

EDIT: Ich habe Authentifizierung in web.config (beides) hinzugefügt, aber es funktioniert immer noch nicht.

<system.web> 
<httpRuntime targetFramework="4.5" /> 
<compilation debug="true" targetFramework="4.5" /> 
<authentication mode="Windows"/> 
<pages> 
    <namespaces> 
    <add namespace="System.Web.Helpers" /> 
    <add namespace="System.Web.Mvc" /> 
    <add namespace="System.Web.Mvc.Ajax" /> 
    <add namespace="System.Web.Mvc.Html" /> 
    <add namespace="System.Web.Routing" /> 
    <add namespace="System.Web.WebPages" /> 
    <add namespace="System.Web.Optimization" /> 
    </namespaces> 
</pages> 

Sollte ich von Windows oder einem anderen Modus?

+0

Wo (in welchem ​​Ansicht) wird diese 'if' Aussage liegt – Andrei

+0

Haben Sie überprüft, ob ModelSate.IsValid wahr ist? Möglicherweise liegt ein Problem mit dem Modell vor, das Sie an die Aktion senden. – James

+1

überprüft, dass alles mit dem 'authentication' Element Ihrer web.config in Ordnung ist? Könnten Sie es posten? – jbl

Antwort

43

Ich hatte das gleiche Problem in einem MVC5-Projekt. Die Lösung bestand darin, die folgenden Zeilen in den Modulen Abschnitt im system.webServer

<remove name="FormsAuthentication" /> 
<add name="FormsAuthentication" type="System.Web.Security.FormsAuthenticationModule" /> 
+0

Das war genau das, was mir passiert ist, nachdem ich mein Projekt auf MVC 5 umgestellt habe. Vielen Dank für die Veröffentlichung von Ger. –

+0

Ich hatte dieses Problem auch auf MVC5. Sie können auch das "remove" -Tag kommentieren, das war's. – user007

+0

danke mein Problem gelöst –

3

Sie überprüfen, ob der Benutzer authentifiziert ist. Verwenden Sie also:

if (User.Identity.IsAuthenticated) 

Dies wird das Problem beheben und wie erwähnt das Authentifizierungselement in Ihrer web.config zu Forms und nicht Windows.

+1

Es funktioniert für "User.Identity.IsAuthenticated" und "Request.IsAuthenticated". Gibt es einen Unterschied zwischen diesen beiden? Sie scheinen identisch zu funktionieren. Das Ändern der Authentifizierung in Forms war der Schlüssel. – Kmaczek

+5

@Kmaczek Es gibt keinen praktischen Unterschied zwischen den beiden. Tatsächlich überprüft die Implementierung von 'Request.IsAuthenticated' nur' User.Identity.IsAuthenticated' und prüft, ob 'User' oder' User.Identity' null sind. Sie können also einfach bei 'Request.IsAuthenticated' bleiben. –

13

müssen Sie FormsAuthentication.SetAuthCookie(acct.UserName, true); nach der Validierung Benutzer und bitte überprüfen, müssen Sie authentication mode="Forms" in web.config festlegen.

+0

Diese Lösung ist für mich sehr gut, ich habe alle anderen Möglichkeiten ausprobiert und endlich funktioniert das. Danke. – LikePod

+0

Echo oben! Ich danke dir auch! –

1

Ich hatte genau gleiche Problem in meinem MVC4 Web Application hinzuzufügen. Ein weiterer möglicher Grund für dieses Problem ist unter Methode in IdentityModels.cs Datei

public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<ApplicationUser> manager) 
    { 
          // Note the authenticationType must match the one defined in CookieAuthenticationOptions.AuthenticationType 
          var userIdentity = await manager.CreateIdentityAsync(this, DefaultAuthenticationTypes.ApplicationCookie); 
          // Add custom user claims here 
        return userIdentity; 
    } 

Stellen Sie sicher, DefaultAuthenticationTypes ist ApplicationCookie

Cheers,

1

ich wurde für etwa 2 Stunden suchen jetzt das Problem zu lösen. Und falls du hast bereits Setups wie Sie gesagt, sind in mehreren Führungen (als MSDN und so) und Sie haben immer noch das Problem, die einzige Sache, die es zu lösen ist hinzuzufügen:

<system.webServer> 
    <modules> 
    <remove name="FormsAuthentication" /> 
    <add name="FormsAuthentication" type="System.Web.Security.FormsAuthenticationModule" /> 
    </modules> 
<system.webServer> 

innerhalb das webconfig.

+0

Willkommen bei SO, was ist Ihre Frage? –

6

Fügen Sie den folgenden Code in Ihrer Web.config

<authentication mode="Forms"> 
    <forms loginUrl="~/_Login/Login" timeout="30" /> 
</authentication> 

und

<modules> 
    <remove name="FormsAuthentication" /> 
    <add name="FormsAuthentication" type="System.Web.Security.FormsAuthenticationModule" /> 
</modules> 
Verwandte Themen