如果我不重新登录,为什么UserManager.FindById()会返回null



我正在尝试查找与当前登录用户关联的用户:

public ActionResult Root(string path)
{
    var id = User.Identity.GetUserId(); //This works
    var currentUser = manager.FindById(id); //This returns null
    return View(db.Folders.ToList()
        .Where(folder => folder.User.Id == currentUser.Id)
        .Where(folder => folder.Path == path));
}

只有当我在种子方法中没有使用指示的部分时,这才有效。如果我真的执行了这个部分,经理。FindById()返回null。

    protected override void Seed(ApplicationDbContext context)
    {
        if (context == null)
        {
            throw new ArgumentNullException("context", "Context must not be null.");
        }
        const string UserName = "admin@tad.com";
        const string RoleName = "Admin";
        var userRole = new IdentityRole { Name = RoleName, Id = Guid.NewGuid().ToString() };
        context.Roles.Add(userRole);
        var hasher = new PasswordHasher();
        var user = new ApplicationUser
        {
            UserName = UserName,
            PasswordHash = hasher.HashPassword("123456"),
            Email = "admin@tad.com",
            EmailConfirmed = true,
            SecurityStamp = Guid.NewGuid().ToString()
        };
        user.Roles.Add(new IdentityUserRole { RoleId = userRole.Id, UserId = user.Id });
        context.Users.Add(user);
        //If I leave this part out, there are no issues.
        new List<Folder>
        { 
            new Folder{Name = "Test", Path = "", User = user},
            new Folder{Name = "Bla", Path = "Test", User = user},
            new Folder{Name = "Lala", Path = "Test/Bla", User = user}
        }.ForEach(f => context.Folders.Add(f));
        context.SaveChanges();
        base.Seed(context);
    }

编辑:开始缩小范围。如果我重新登录我的用户,一切都很好测试期间的活动用户仍然从上一个调试会话登录。

我看到了问题:

测试期间的活动用户仍然从上一个调试会话登录。

身份验证cookie包含上一个会话中userId的Guid。如果每次都重新创建用户,那么数据库中userId的guid就会发生更改,并且与cookie中存储的任何Id都不匹配。因此,不要在每次调试会话中重新创建用户,或者在每次调试时杀死您的cookie。

相关内容

  • 没有找到相关文章