2017-04-06 2 views
1

J'utilise IdentityServer 3 pour l'authentification. Je stocke des utilisateurs dans la base de données SQL en utilisant le framework d'identité asp.net. L'équipe IndentityServer a fourni une bibliothèque IdentityManager.AspNetIdentity simple pour les administrateurs pour gérer les utilisateurs.Le courrier électronique ne peut pas être nul ou vide lors de la création d'un nouvel utilisateur?

J'ai suivi le video here et configuré mon application.

J'ai mon propre ApplicationUser et ApplicationUserManager classe comme ci-dessous

public class ApplicationUser : Microsoft.AspNet.Identity.EntityFramework.IdentityUser 
{ 
} 

public class ApplicationUserManager : Microsoft.AspNet.Identity.UserManager<ApplicationUser, string> 
{ 
    public ApplicationUserManager(ApplicationUserStore store, IDataProtectionProvider dataProtectionProvider) 
     : base(store) 
    { 
     // Configure validation logic for usernames 
     UserValidator = new UserValidator<ApplicationUser>(this) 
     { 
      AllowOnlyAlphanumericUserNames = false, 
      RequireUniqueEmail = true     
     }; 

     // Configure validation logic for passwords 
     PasswordValidator = new PasswordValidator 
     { 
      RequiredLength = 6, 
      RequireNonLetterOrDigit = true, 
      RequireDigit = true, 
      RequireLowercase = true, 
      RequireUppercase = true, 
     }; 

     // Configure user lockout defaults 
     UserLockoutEnabledByDefault = true; 
     DefaultAccountLockoutTimeSpan = TimeSpan.FromMinutes(5); 
     MaxFailedAccessAttemptsBeforeLockout = 5; 

     EmailService = new EmailService(); 
     SmsService = new SmsService(); 

     if (dataProtectionProvider != null) 
     { 
      UserTokenProvider = 
       new DataProtectorTokenProvider<ApplicationUser>(dataProtectionProvider.Create("UserToken")); 
     } 
    }  
} 

Lorsque je tente de créer l'utilisateur, je reçois une erreur

email ne peut être nul ou vide.

enter image description here

Je peux me débarrasser de cette erreur en mettant RequireUniqueEmail-false en ApplicationUserManager. Cependant, ce n'est pas mon exigence. Je veux garder RequireUniqueEmail à true

Question
Comment puis-je obtenir le champ d'adresse e-mail apparaisse sur Créer une nouvelle page de l'utilisateur. Notez que ApplicationUser est dérivé de IdentityUser qui a déjà la propriété Email. Donc, je ne suis pas sûr pourquoi il n'apparaît pas sur créer une nouvelle page utilisateur?

Mise à jour 1
Alors j'ai regardé le code pour new user in github, mais son développé angulaire. Je ne suis pas familier avec la syntaxe angulaire :(et comment le modèle est passé à voir.Je ne suis pas sûr de ce que je dois faire dans l'application grand public pour activer le champ email sur le nouvel écran de l'utilisateur

Répondre

0

J'ai partiellement résolu mon problème

la page créer utilisateur ne montre que nécessaire propriété de IndetityUser (dans mon cas, il ApplicationUser qui est dérivé de IdentityUser). la Email propriété est en IdentityUser classe mais son virtuel. je peux simplement remplacer la propriété en ApplicationUser et ajouter requis attribut

public class ApplicationUser : IdentityUser 
{ 
    [Required] 
    public override string Email { get; set; } 
} 

Cela va ajouter un champ email sur Créer une page utilisateur comme je le veux. Cependant, lorsque je modifie l'utilisateur, il affiche deux fois le champ email. (pour moi c'est correct pour l'instant étant donné que cette fonctionnalité est interne seulement)