Ort*_*und 0 c# asp.net asp.net-mvc entity-framework-6 asp.net-identity-3
为了安全起见,我不希望任何人都可以在我的网站上进行注册,但是当网站上有可访问的注册页面时,我不能阻止用户进行注册,因此我在ApplicationUser模型中添加了“授权”标志:
public class ApplicationUser : IdentityUser
{
public string FirstName { get; set; }
public string LastName { get; set; }
public bool Authorized { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我们的想法是,如果一个用户,无论是登录还是不行,没有这个属性设置为true值,用户将不能够访问受保护的内容。先前授权的用户将必须授权新用户。
这就给如何获得第一个用户授权带来了疑问,因此我认为我可以在迁移中为该用户添加种子。见下文:
namespace Ortund.Migrations
{
internal sealed class Configuration :
DbMigrationsConfiguration<Ortund.Models.ApplicationDbContext>
{
protected override void Seed(Ortund.Models.ApplicationDbContext context)
{
context.Users.AddOrUpdate(
u => u.Id,
new Models.ApplicationUser { EmailAddress = "email@site.com", Authorized = true, EmailConfirmed = true }
);
}
}
}
Run Code Online (Sandbox Code Playgroud)
显然,我在这里缺少一些关键字段,这是我遇到麻烦的地方。
我不知道UserManager如何对密码进行哈希处理,因此我似乎无法在此处复制该过程,因为该函数不是异步Task。
作为参考,这是AccountController中的Register方法:
public async Task<ActionResult> Register(RegisterViewModel model)
{
if (ModelState.IsValid)
{
var user = new ApplicationUser { UserName = model.Email, Email = model.Email };
var result = await UserManager.CreateAsync(user, model.Password);
...
}
}
Run Code Online (Sandbox Code Playgroud)
该CreateAsync函数指定将被散列明文密码字符串。试图在我的种子上面的方法复制此,我只需要访问ApplicationUserManager.Create(Microsoft.AspNet.Identity.Owin.IdentityFactorOptions<ApplicationUserManager> options, Microsoft.Owin.IOwinContext context)它,据我所看到的,在这里不适合我的要求。
我怎么可以在我的种子数据的完整ApplicationUser?
你可以打电话到UserManager.Create方法,并通过它的用户名,明文密码。这将哈希密码为你获取到数据库
像这样:
var userStore = new UserStore<ApplicationUser>(context);
var userManager = new UserManager<ApplicationUser>(userStore);
var user = new ApplicationUser { UserName = "username"};
userManager.Create(user, "password");
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1697 次 |
| 最近记录: |