15

Ich verwende mvc 5 mit identity 2.0. Ich möchte benutzerdefinierte Ansprüche Werte über die Anwendung verwenden, aber ich bekomme Nullwert. Wo mache ich falsch? Bitte helfen Sie mirHinzufügen und Abrufen benutzerdefinierter Schadenswerte nicht möglich

Aktualisiert Code

Login-Code in Konto-Controller

if (!string.IsNullOrEmpty(model.UserName) && !string.IsNullOrEmpty(model.Password)) 
      { 
       AuthenticationManager.SignOut(DefaultAuthenticationTypes.ExternalCookie); 
       var result = SignInManager.PasswordSignIn(model.UserName, model.Password, model.RememberMe, shouldLockout: false); 


       //Generate verification token 
       Dictionary<string, string> acceccToken = null; 
       if (SignInStatus.Success == 0) 
       { 
        var userDeatails = FindUser(model.UserName, model.Password).Result; 
        if (userDeatails != null) 
         acceccToken = GetTokenDictionary(model.UserName, model.Password, userDeatails.Id); 
       } 
       if (model.RememberMe) 
       { 
        HttpCookie userid = new HttpCookie("rembemberTrue", "1"); 
        userid.Expires.AddDays(1); 
        Response.Cookies.Add(userid); 
       } 
       else 
       { 

        HttpCookie userid = new HttpCookie("rembemberTrue", "0"); 
        userid.Expires.AddDays(1); 
        Response.Cookies.Add(userid); 

       } 
       #region custom claims 


       var claims = new Claim[] 
          { 
        new Claim("urn:Custom:MasterUniqueId", Convert.ToString(Guid.NewGuid())) 
           }; 
       ClaimsIdentity identity = new ClaimsIdentity(claims, DefaultAuthenticationTypes.ApplicationCookie); 
       IAuthenticationManager authenticationManager = System.Web.HttpContext.Current.GetOwinContext().Authentication; 
       authenticationManager.SignIn(identity); 

Starup.Auth.cs

public void ConfigureAuth(IAppBuilder app) 
     { 
      // Configure the db context, user manager and signin manager to use a single instance per request 
      app.CreatePerOwinContext(ApplicationDbContext.Create); 
      app.CreatePerOwinContext<ApplicationUserManager>(ApplicationUserManager.Create); 
      app.CreatePerOwinContext<ApplicationSignInManager>(ApplicationSignInManager.Create); 

      // Enable the application to use a cookie to store information for the signed in user 
      // and to use a cookie to temporarily store information about a user logging in with a third party login provider 
      // Configure the sign in cookie 
      app.UseCookieAuthentication(new CookieAuthenticationOptions 
      { 
       AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie, 
       LoginPath = new PathString("/Account/Login"), 
       Provider = new CookieAuthenticationProvider 
       { 
        // Enables the application to validate the security stamp when the user logs in. 
        // This is a security feature which is used when you change a password or add an external login to your account. 
        OnValidateIdentity = SecurityStampValidator.OnValidateIdentity<ApplicationUserManager, ApplicationUser>(
         validateInterval: TimeSpan.FromMinutes(30), 
         regenerateIdentity: (manager, user) => user.GenerateUserIdentityAsync(manager)) 
       }, 
       SlidingExpiration = true, 
       ExpireTimeSpan = TimeSpan.FromMinutes(60) 
      }); 

....... ....

andere Steuerung

Hier ich, dass Anspruch Werte zu holen versuche aber es ist Show null

var identity = (ClaimsIdentity)User.Identity; 
var res= identity.FindFirst("urn:Custom:MasterUniqueId"); 

res ist null

+0

Können Sie den vollständigen Anmelden Code, den Sie verwenden, zeigen? Ist die Methode, in der dieser Code eingegeben wird, richtig asynchron? Vermissen Sie auch eine 'app.UseCookieAuthentication (...)' in Ihrem Startup? –

+0

@BrendanGreen, Ich habe meine Frage aktualisiert, Bitte sehen Sie –

+0

Können Sie sehen, was die Ausgabe von 'User.Identity.IsAuthenticated' und' User.Identity.Name' ist? –

Antwort

-1

Haben Sie versucht:

var res = identity.Claims.Where(c=>c.Type=="urn:Custom:MasterUniqueId").FirstOrDefault(); 

?

+0

Ja, ich habe es versucht, aber ich bekomme immer noch null. Wenn Login-Code zu diesem Zeitpunkt MasterUniqueId in Eigenschaften sichtbar. aber nach dem Methodenumfang ist es einfach weg –

0

Um in Ihrem Konto-Controller einen gültigen AuthenticationManager zu erhalten, sollten Sie Request.GetOwinContext().Authentication verwenden. Im affraid System.Web.HttpContext.Current.GetOwinContext().Authentication erhalten Sie einen neuen AuthenticationManager anstelle des aktuellen Owin-Kontext ein

Verwandte Themen