2014-06-12 134 views
1

在過去的幾天我一直在試圖獲得登錄功能爲我的ASP.NET MVC應用程序的工作。我的應用程序的用戶數據存儲在MS SQL數據庫(2008 R2)中。此數據表如下:ASP.NET MVC身份登錄值

table EMPLOYEE 
EMPLOYEECODE  int     identity 
NAME    varchar(75)   not null 
PASSWORD   varchar(255)   not null 

導致使用實體框架下面的模型:

public partial class EMPLOYEE 
{  
    public int EMPLOYEECODE { get; set; } 
    public string NAME { get; set; } 
    public string PASSWORD { get; set; } 
} 

我想這樣做,是編輯所提供的(默認)的AccountController到使其能夠使用EMPLOYEE(EMPLOYEECODE,PASSWORD)來驗證和登錄用戶。我想我需要改變我的UserManager,使其使用EMPLOYEE和EMPLOYEECODE和PASSWORD字段,但我不知道如何。當前登錄的方法如下:

public AccountController() 
     : this(new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(new ApplicationDbContext()))) 
    { 
    } 

我怎麼能解決這個問題:

[HttpPost] 
[AllowAnonymous] 
[ValidateAntiForgeryToken] 
public async Task<ActionResult> Login(LoginViewModel model, string returnUrl) 
{ 
    if (ModelState.IsValid) 
    { 
     var user = await UserManager.FindAsync(model.UserName, model.Password); 
     if (user != null) 
     { 
      await SignInAsync(user, model.RememberMe); 
      return RedirectToLocal(returnUrl); 
     } 
     else 
     { 
      ModelState.AddModelError("", "Invalid username or password."); 
     } 
    } 

    // If we got this far, something failed, redisplay form 
    return View(model); 
} 

我的UserManager如下實例化?我也嘗試使用身份驗證cookie,但我不知道如何從cookie中檢索用戶名。任何幫助將不勝感激!

回答

0

的的UserManager和UserStore用其自己的表的ASP.NET身份認證的用戶,角色等相關...如果你想使用不同的表,你必須創建一個自定義登錄功能。

+0

如果證書與數據庫中的證書相匹配,使用FormsAuthentication.SetAuthCookie(用戶名)會這樣嗎?如果是這樣,我如何解密認證以檢查哪個用戶與認證cookie相匹配。 – Simon

0

我也有類似的要求,我落得這樣做如下:

  • 用於遷移創建標識表
  • 修改了身份類使用,而不是GUID INT,作爲標識
  • 將我的數據從Employee表遷移到AspNetUsers表
  • 根據您的情況,將EmployeeCode映射到AspNetUsers.Id字段並將密碼映射到AspNetUsers.PasswordHash。
  • 根據您的密碼是如何保存在數據庫中,你可能需要在這裏添加額外的步驟,讓他們到表中的散列格式。

如果您的密碼需要被散列,而不是遷移,數據,看看用戶是如何在身份註冊,並把現有的用戶通過同一個過程,像這樣:

  1. 得到一個在僱員表
  2. 所有用戶對於每個用戶的列表中,使用owin上下文以檢索的的UserManager和簽到經理
  3. 創建使用EmployeeCode和EmployeePassword
  4. ü新ApplicationUser se UserManager在數據庫中創建用戶