2014-02-11 92 views
0

以下是我的代碼示例:表單身份驗證安全

這是我只想鎖定到用戶的頁面。

[Authorize] 
public ActionResult Profile() 
{ 
    HttpCookie authCookie = Request.Cookies[FormsAuthentication.FormsCookieName]; 
    FormsAuthenticationTicket ticket = FormsAuthentication.Decrypt(authCookie.Value); 
    var users = _service.Get().Where(x => x.EmailAddress.ToLower() == ticket.Name); 
    var user = users.First(); 
    return View(user); 
} 

這是我記錄我的用戶在:

[HttpPost] 
public ActionResult Login(LoginViewModel model) 
{ 
    if (!ModelState.IsValid) 
     return View(model); 

    var exs = _service.ValidateUser(model.EmailAddress, model.Password); 
    if (exs.Any()) 
    { 
     AddModelExceptionsToModelState(ModelState, exs); 
     return View(model); 
    } 

    FormsAuthentication.SetAuthCookie(model.EmailAddress,model.RemeberMe); 
    return RedirectToAction("Profile"); 
} 

我不知道我在做什麼,安全的,它被保存並不重要信息,但我想它是安全。

以上登錄/授權方法是否遇到安全/安全的使用方法?

如果是的話如何創建一個方法來返回登錄用戶?我最好是在一個抽象控制器類中做到這一點,然後從它中間擊中它?

是否有更好的方式來處理用戶的登錄和註銷?

我正在使用實體框架和MVC5。請注意,我不能使用會員資格數據庫,因爲它不允許在此項目中使用。

+0

使用mvc5中的新型會員資格。不要使用具體類型,而要自己實現接口。它是開源的,因此您可以瞭解他們如何執行標準的成員資格操作。 – DrinkBird

+0

你能指出我正確的方向嗎? – LmC

+0

真的屬於codereview.stackexchange.com –

回答

1

你的做法是好的。但是,可以簡化使用Cookie的控制器:

[Authorize] 
public ActionResult Profile() 
{ 
    string userName = this.User.Identity.Name; 
    var users = _service.Get().Where(x => x.EmailAddress.ToLower() == userName); 
    var user = users.First(); 
    return View(user); 
} 

這是因爲該窗體身份驗證模塊做幾乎您在原始方法的前兩行也做了同樣的工作,但模塊將主要用於請求生命週期,您可以按照上面顯示的方式訪問主體。