2014-05-02 167 views
0

我加了幾個字段(EmailForenameSurname等)到AspNetUsers表,但我想知道是否有可能修改裏面的標準的MVC模板的登錄Visual Studio 2013改爲使用新的Email字段。MVC登錄使用不同的領域,防止重複

我已經改變了一切,據我所見,請看下面。

LoginViewModel

public class LoginViewModel 
{ 
    [Required] 
    [Display(Name = "Email Address")] 
    public string Email { get; set; } 

    [Required] 
    [DataType(DataType.Password)] 
    [Display(Name = "Password")] 
    public string Password { get; set; } 

    [Display(Name = "Remember me?")] 
    public bool RememberMe { get; set; } 
} 

的AccountController

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

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

對於一些未知的原因,儘管註冊過程中節省在正確的字段中的值,我不能與用戶使用的登錄電子郵件地址,除非用戶註冊後打開AspNetUsers表並交換電子郵件和用戶名數據。

請問我錯過了什麼?

還有可能在註冊之前檢查現有的電子郵件地址以確保沒有可能的重複?

任何幫助,將不勝感激:-)

回答

0

是的,它是可能的「修改」內部VS 2013的標準MVC模板使用新的電子郵件領域的登錄。

是的,可以在將您的東西保存到數據庫之前檢查現有的電子郵件。這就是所謂的「驗證」。

驗證是一個冗長的主題,可以發生在應用程序的多個層面。驗證發生的兩個最常見的地方是UI級別和業務邏輯級別。

例如,確保需要字段(如密碼)通常發生在UI級別。最常見的做法是在屬性上使用屬性。這些屬性是通過DataAnnotations獲得的。閱讀這些或谷歌它。你會發現大量的例子。

另一種常見的方式是稱爲Fluent Validation,但由於您剛開始使用,我強烈建議使用DataAnnotations。隨着您獲得更多經驗並更好地瞭解工作的方式和方式,如果您覺得合適,請逐步轉向Fluent驗證。

至於業務邏輯層面,這是你(程序員)通常會把與你的公司有關的所有邏輯和規則放在哪裏。例如,考慮這個愚蠢的例子: 公司A可能不在乎重複的電子郵件是否污染了他的數據庫。但是B公司可能會在乎是否創建了重複的電子郵件,因此A公司和B公司之間的業務邏輯將會非常不同,並且您的代碼將反映這些差異。

簡而言之,這就是我們所說的業務邏輯驗證,通常是發生在應用程序中的另一個級別。

不幸的是,我沒有任何代碼示例給你,但你可以在網上找到很多例子。

我的建議是從一個基本的MVC一步一步的教程開始,這將有助於你理解每件事物是如何工作的。我擔心回答(或者顯示你的代碼)最終可能會提出更多的問題而不是答案。

這裏就是我想要做的:http://www.asp.net/mvc/tutorials/mvc-5/introduction/getting-started

從步驟1至步驟11恰好覆蓋驗證,什麼不是。

希望這有助於(或不)。