6

J'ai un projet MVC standard, avec les objets UserManager et SignInManager et un AccountController, avec la fonctionnalité de connexion et de type de registre pré-créée.User.Identity.IsAuthenticated toujours false après le succès de PasswordSignInAsync

Je peux enregistrer de nouveaux utilisateurs à ma table AspNetUsers, mais quand je me connecte j'appeler: -

var result = await SignInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, shouldLockout: false); 

Les données proviennent par de la forme correcte, et le résultat est le succès, que je m'y attendais.

J'ai ensuite essayé les réoriente suivantes: -

case SignInStatus.Success: 
    //return RedirectToLocal("/admin/"); 
    return RedirectToAction("Index", "Admin"); 

mais sur une page, après une connexion réussie, User.Identity.IsAuthenticated est toujours faux, et User.Identity.Name est une chaîne vide.

Qu'est-ce que je fais mal? J'ai fait un autre projet de la même manière avec la même configuration dans le passé et je n'ai eu aucun problème.

web.config

<system.web> 
    <compilation debug="true" targetFramework="4.5.1" /> 
    <httpRuntime targetFramework="4.5.1" /> 
    <!--<authentication mode="Forms"> 
     <forms loginUrl="~/Account/Login/" timeout="1000" /> 
    </authentication>--> 
    <authentication mode="None" /> 
</system.web> 
<modules> 
    <remove name="FormsAuthentication" /> 
</modules> 

Quelqu'un peut-il suggérer ce que je fais mal? Cela cause des problèmes majeurs maintenant.

À la votre!

+0

Avez-vous configuré 'CookieAuthenticationOptions' lors du démarrage? – Nkosi

+0

Comment est-ce que je fais ceci? –

+0

quelle version d'asp.net utilisez-vous? – Nkosi

Répondre

3

Vérifiez si le fichier Startup.Auth.cs se trouve dans le dossier App_Start du projet.

public partial class Startup { 
    public void ConfigureAuth(IAppBuilder app) {    
     // This uses cookie to store information for the signed in user 
     var authOptions = new CookieAuthenticationOptions { 
      AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,     
      LoginPath = new PathString("/Account/Login"), 
      LogoutPath = new PathString("/Account/Logout"), 
      ExpireTimeSpan = TimeSpan.FromDays(7), 
     }; 
     app.UseCookieAuthentication(authOptions); 
    } 
} 

et est appelé à partir de la fonction de la version de asp.net et l'identité de classe Startup

public partial class Startup { 
    public void Configuration(IAppBuilder app) { 
     // Surface Identity provider 
     ConfigureAuth(app); 

     //..other start up code 
    } 
} 

que vous utilisez, vous devriez jeter un oeil à ce

ASP.NET Identity AuthenticationManager vs. SignInManager and cookie expiration

+1

Merci pour cela, le signera. Nous avions déjà ce code dans le projet, mais il semble que ce soit quelque chose sur le serveur provoquant une authentification de collision. –

0

Pour moi, c'était le web.config, commenter les lignes suivantes

<system.webServer> 
    <modules> 
     <!--<remove name="FormsAuthentication" /> 
     <remove name="ApplicationInsightsWebTracking" /> 
     <add name="ApplicationInsightsWebTracking" type="Microsoft.ApplicationInsights.Web.ApplicationInsightsHttpModule, Microsoft.AI.Web" preCondition="managedHandler" /> 
     --> 
    </modules> 
</system.webServer>