2016-04-24 7 views
0

anzumelden, habe ich den folgenden Fehler, wenn ich versuche, mich mit Benutzername (E-Mail) und Passwort anzumelden.'Die Eigenschaft' Claims 'für den Typ' Benutzer 'ist keine Navigationseigenschaft.' Wenn ich versuche, mich mit Owin

The property 'Claims' on type 'Users' is not a navigation property. The Reference and Collection methods can only be used with navigation properties. Use the Property or ComplexProperty method. 

Allerdings verstehe ich nicht, wo dieser Fehler herkommt, da ich in der Lage, erfolgreich eine Person registrieren lassen, ohne etwas aus der Ferne den Ansprüche in meiner eigenen Datenbank zu haben.

Der Code schlägt fehl, wenn ich versuche, userManager.FindAsync zu tun.

 try 
     { 
      var userManager = context.OwinContext.GetUserManager<ApplicationUserManager>(); 

      Users user = await userManager.FindAsync(context.UserName, context.Password); 

      if (user == null) 
      { 
       context.SetError("invalid_grant", "The user name or password is incorrect."); 
       return; 
      } 

      var oAuthIdentity = await user.GenerateUserIdentityAsync(userManager, OAuthDefaults.AuthenticationType); 
      var cookiesIdentity = await user.GenerateUserIdentityAsync(userManager, CookieAuthenticationDefaults.AuthenticationType); 

      var properties = CreateProperties(user.Email); 
      var ticket = new AuthenticationTicket(oAuthIdentity, properties); 

      context.Validated(ticket); 
      context.Request.Context.Authentication.SignIn(cookiesIdentity); 
     } 
     catch(Exception ex) 
     { 
      throw new ArgumentException(string.Format("Could not find client data due to following error: {0}", ex)); 
     } 

Meine Benutzerklasse (die aus meiner SQL-Datenbank erstellt wird):

public partial class Users 
    { 
     public int Id { get; set; } 
     public string FirstName { get; set; } 
     public string LastName { get; set; } 
     public DateTime? CreatedDate { get; set; } 
     public DateTime? ModifiedDate { get; set; } 
     public override string Email { get; set; } 
     public string Password { get; set; } 
     public override string UserName { get; set; } 
    } 

separate Datei:

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

Wo ich etwas mit Blick auf bin, der den Fehler verursachen könnte, die ich m empfangen? Fein

Registrierung funktioniert:

 if (!ModelState.IsValid) 
     { 
      return BadRequest(ModelState); 
     } 

     try { 
      var email = model.Email; 
      var password = model.Password; 
      var hashedPassword = PasswordHash.HashPassword(password); 

      Users user = new Users 
      { 
       UserName = email, 
       Email = email, 
       PasswordHash = hashedPassword, 
       Password = hashedPassword 
      }; 

      IdentityResult result = await UserManager.CreateAsync(user, hashedPassword); 

      if (!result.Succeeded) 
      { 
       return GetErrorResult(result); 
      } 

      return Ok(); 
     } 
     catch(Exception ex) 
     { 
      throw new ArgumentException(string.Format("Error while trying to Register: ", ex)); 
     } 

Antwort

0

ich es nie bekam auf der Demo-basiert arbeiten ich auf http://bitoftech.net/ gefunden, so habe ich die Demo-Code als Basis statt und migriert alles Schritt für Schritt. Jetzt funktioniert meine Authentifizierung.

Mein Vorschlag für zukünftige Entwickler. Verwenden Sie die Demo sofort als Grundlage. Es wirkt wie ein Zauber.

Ich habe bemerkt, dass die Demo Ansprüche gestellt und eine Schadenstabelle erstellt hat.

Verwandte Themen