asp.net-mvc-5 – 在MVC 5的IPasswordStore中,SetPasswordHashAsync必须完成的所有事情是什么?

前端之家收集整理的这篇文章主要介绍了asp.net-mvc-5 – 在MVC 5的IPasswordStore中,SetPasswordHashAsync必须完成的所有事情是什么?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
尝试在新的asp.net mvc 5中实现IPasswordStore,我有点不知所措.我想使用自己的ORM.

从示例项目中使用’register’屏幕时运行的脚手架’AccountController’中获取这个熟悉的代码片段.

  1. public async Task<ActionResult> Register(Registerviewmodel model)
  2. {
  3. if (ModelState.IsValid)
  4. {
  5. var user = new ApplicationUser() { UserName = model.UserName };
  6. var result = await UserManager.CreateAsync(user,model.Password);
  7. if (result.Succeeded)
  8. {
  9. await SignInAsync(user,isPersistent: false);
  10. return RedirectToAction("Index","Home");
  11. }
  12. else
  13. {
  14. AddErrors(result);
  15. }
  16. }
  17.  
  18. // If we got this far,something Failed,redisplay form
  19. return View(model);
  20. }

  1. var result = await UserManager.CreateAysnc(user,model.Password)

line首先调用IPasswordStore函数

  1. public Task SetPasswordHashAsync(TUser user,string passwordHash)

没有先从IUserStore调用

  1. public Task CreateAsync(TUser user)

如果尚未在db中创建用户,如何设置密码哈希?此外,我们实际上甚至不知道我们是否可以创建提议的“用户”,因为我们还没有检查是否已使用用户名

  1. public Task<TUser> FindByNameAsync(string userNameIn)

这被称为之后.

有任何想法吗?

解决方法

您是正确的注意到在创建用户之前您可能不应该为用户保留密码哈希值.
您可以将密码哈希保存到一个位置,如果实际上没有实际创建用户,该位置将被还原.密码不应存储,直到创建和存储用户,即在CreateAsync(TUser用户)中.

EntityFramework实现中的IdentityUser就是这样一个位置,它使您能够在CreateAsync方法中存储用户和密码信息.我并不是说你应该引用Identity.EntityFramework程序集,只是说同时具有类似于IdentityUser的User和PasswordHash信息的User对象是一种可能的解决方案.

猜你在找的asp.Net相关文章