爲了安全起見,我不希望只有任何人能夠在我的網站上註冊,但我無法阻止用戶註冊,同時在網站上有一個註冊頁面,所以我添加了一個「授權」標誌給ApplicationUser
型號:如何使用ASP.NET身份將用戶引入數據庫?
public class ApplicationUser : IdentityUser
{
public string FirstName { get; set; }
public string LastName { get; set; }
public bool Authorized { get; set; }
}
的想法是,如果一個用戶,無論是登錄還是不行,沒有這個屬性設置爲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 protected]", Authorized = true, EmailConfirmed = true }
);
}
}
}
顯然我錯過了一些關鍵字段在這裏密碼散列一個,這就是我有麻煩。
我不知道UserManager如何散列密碼,所以我似乎無法複製該過程,因爲函數不是異步任務。
以供參考,在這裏是在的AccountController註冊方法:
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);
...
}
}
的CreateAsync功能指定將被散列明文密碼字符串。試圖在上面的Seed方法中複製此內容,我只能訪問ApplicationUserManager.Create(Microsoft.AspNet.Identity.Owin.IdentityFactorOptions<ApplicationUserManager> options, Microsoft.Owin.IOwinContext context)
,據我所知,這不符合我的要求。
如何在我的播種數據中創建完整的ApplicationUser?
它是一個很長的時間,因爲香港專業教育學院做到了這一點,但敢肯定,你應該重寫種子法上的DbContext而不是遷移。 – Derek
「授權」角色可以達到同樣的目的,但適合現有的安全模型(這意味着您不必跳過限制來限制對操作的訪問)。 Re:你現在的問題,讓框架爲你處理帳戶設置。 – Basic