我正在尝试查找与当前登录用户关联的用户:
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。