Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 5 usermanager.findasync为代码生成的用户返回null_Asp.net Mvc 5_Asp.net Identity 2 - Fatal编程技术网

Asp.net mvc 5 usermanager.findasync为代码生成的用户返回null

Asp.net mvc 5 usermanager.findasync为代码生成的用户返回null,asp.net-mvc-5,asp.net-identity-2,Asp.net Mvc 5,Asp.net Identity 2,我在代码中创建的用户有问题。它们适用于最初的几次登录尝试,但在一段时间后停止登录并从findasync方法返回null。如果我使用findbyname,它将返回用户,但是这不会检查密码,因此我无法使用它。这些用户也没有密码散列,但是我使用register方法创建的用户有密码散列 if (!db.Users.Any()) { var userStore = new UserStore<ApplicationUser>(db);

我在代码中创建的用户有问题。它们适用于最初的几次登录尝试,但在一段时间后停止登录并从findasync方法返回null。如果我使用findbyname,它将返回用户,但是这不会检查密码,因此我无法使用它。这些用户也没有密码散列,但是我使用register方法创建的用户有密码散列

if (!db.Users.Any())
        {
            var userStore = new UserStore<ApplicationUser>(db);
            var userManager = new ApplicationUserManager(userStore);
            var user = new ApplicationUser
            {
                UserName = "username",
                FirstName = "first",
                LastName = "last",
                EmailAddress = "example@example.com",
                DateCreated = DateTime.Now,
                DateModified = DateTime.Now,
                ContactNumber = "0208555555",
                LastActivityDate = DateTime.Now,
                LastPasswordChangedDate = DateTime.Now
            };
            user.LockoutEnabled = false;
            userManager.Create(user, "abc123");
            userManager.AddToRole(user.Id, "Admin");
        }

public async Task<ActionResult> Login(LoginViewModel model, string returnUrl)
    {
        if (ModelState.IsValid)
        {
            var user = await UserManager.FindAsync(model.UserName, model.Password);
            var user2 = await UserManager.FindByNameAsync(model.UserName);
            PasswordVerificationResult result = PasswordVerificationResult.Failed;
            result = UserManager.PasswordHasher.VerifyHashedPassword(user2.PasswordHash, model.Password);
            if (user != null)
            {
                await SignInAsync(user, model.RememberMe);
                AuditLog.LogUserAction(UserManager.FindByName(model.UserName).Id, "Login", "User successfully logged in.");
                user.LastActivityDate = DateTime.Now;
                await db.SaveChangesAsync();
                return RedirectToLocal(returnUrl);
            }
            else
            {
                ModelState.AddModelError("", "Invalid username or password.");
            }
        }

        // If we got this far, something failed, redisplay form
        return View(model);
    }

 public class ApplicationUser : IdentityUser
{
    [Required]
    [Display(Name = "First name")]
    [MaxLength(20)]
    public string FirstName { get; set; }

    [Required]
    [Display(Name = "Last name")]
    [MaxLength(50)]
    public string LastName { get; set; }

    [Required]
    [Display(Name = "Email")]
    [EmailAddress(ErrorMessage = "Invalid email address")]
    public string EmailAddress { get; set; }

    [Required]
    [Display(Name = "Contact number")]
    public string ContactNumber { get; set; }

    [Required]
    [Display(Name = "Service Provider")]
    public int SK_ServiceProviderID { get; set; }
    public virtual ServiceProvider ServiceProvider { get; set; }

    [Required]
    [DisplayName("Date Created")]
    public DateTime DateCreated { get; set; }

    [Required]
    [DisplayName("Date Modified")]
    public DateTime DateModified { get; set; }

    [Required]
    public DateTime LastPasswordChangedDate { get; set; }

    [Required]
    public DateTime LastActivityDate { get; set; }

    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;
    }
}
if(!db.Users.Any())
{
var userStore=新的userStore(db);
var userManager=新的ApplicationUserManager(userStore);
var user=新应用程序用户
{
UserName=“UserName”,
FirstName=“first”,
LastName=“last”,
电子邮件地址=”example@example.com",
DateCreated=DateTime。现在,
DateModified=DateTime.Now,
ContactNumber=“020855555”,
LastActivityDate=日期时间。现在,
LastPasswordChangedDate=DateTime.Now
};
user.LockoutEnabled=false;
创建(用户,“abc123”);
userManager.AddToRole(user.Id,“Admin”);
}
公共异步任务登录(LoginView模型,字符串返回URL)
{
if(ModelState.IsValid)
{
var user=await UserManager.FindAsync(model.UserName,model.Password);
var user2=await UserManager.FindByNameAsync(model.UserName);
PasswordVerificationResult=PasswordVerificationResult.失败;
结果=UserManager.PasswordHasher.VerifyHashedPassword(user2.PasswordHash,model.Password);
如果(用户!=null)
{
等待符号同步(用户,model.RememberMe);
AuditLog.LogUserAction(UserManager.FindByName(model.UserName.Id,“Login”,“用户成功登录”);
user.LastActivityDate=DateTime.Now;
等待db.saveChangesSync();
返回重定向到本地(returnUrl);
}
其他的
{
AddModelError(“,“无效的用户名或密码”);
}
}
//如果我们走到这一步,有些东西失败了,重新显示形式
返回视图(模型);
}
公共类应用程序用户:IdentityUser
{
[必需]
[显示(Name=“First Name”)]
[MaxLength(20)]
公共字符串名{get;set;}
[必需]
[显示(Name=“Last Name”)]
[MaxLength(50)]
公共字符串LastName{get;set;}
[必需]
[显示(Name=“电子邮件”)]
[电子邮件地址(ErrorMessage=“无效电子邮件地址”)]
公共字符串电子邮件地址{get;set;}
[必需]
[显示(姓名=“联系电话”)]
公共字符串ContactNumber{get;set;}
[必需]
[显示(Name=“服务提供商”)]
public int SK_ServiceProviderID{get;set;}
公共虚拟服务提供程序服务提供程序{get;set;}
[必需]
[显示名称(“创建日期”)]
public DateTime DateCreated{get;set;}
[必需]
[显示名称(“修改日期”)]
公共日期时间日期修改{get;set;}
[必需]
公共日期时间LastPasswordChangedDate{get;set;}
[必需]
公共日期时间LastActivityDate{get;set;}
公共异步任务GenerateUserIdentityAsync(用户管理器)
{
//注意authenticationType必须与CookieAuthenticationOptions.authenticationType中定义的类型匹配
var userIdentity=wait manager.CreateIdentityAsync(这是DefaultAuthenticationTypes.ApplicationOkie);
//在此处添加自定义用户声明
返回用户身份;
}
}

结果表明它失败了,因为我在通过代码创建用户时没有设置安全戳字段,并且在使用以下命令时,该字段不能为空:

var resetToken = await UserManager.GeneratePasswordResetTokenAsync(model.UserId);
IdentityResult passwordChangeResult = await UserManager.ResetPasswordAsync(model.UserId, resetToken, model.Password);
对另一个问题的回答帮助我弄明白了