0

我正在爲我的Web應用程序添加身份驗證。它是一個asp.net mvc單頁面應用程序。目前,Web應用程序僅使用asp.net mvc進行身份驗證。我檢查了AppController中的Request.IsAuthenticated,如果它沒有通過身份驗證,那麼我會提供登錄頁面(否則我會保存app.html頁面)。在我的AccountController,我有以下登錄操作:HTML/Javascript客戶端用戶登錄

[HttpPost] 
    [AllowAnonymous] 
    [ValidateAntiForgeryToken] 
    public ActionResult LogOn(LogOnModel model, string returnUrl) 
    { 
     if (ModelState.IsValid) 
     { 
      //VALIDATE USER NAME AND PASSWORD     
      if (Repository_Security.CheckUser(model.UserName, model.Password)) 
      { 
       FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe); 
       if (Url.IsLocalUrl(returnUrl) && returnUrl.Length > 1 && returnUrl.StartsWith("/") && !returnUrl.StartsWith("//") && !returnUrl.StartsWith("/\\\\")) 
       { 
        return Redirect(returnUrl); 
       } 
       else 
       { 
        return RedirectToAction("Index", "App"); 
       } 
      } 
      else 
      { 
       ModelState.AddModelError("", "The user name or password provided is incorrect."); 
      } 
     } 

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

真的它只是採取了用戶名和密碼和驗證針對數據庫。如果它通過,則設置AuthCookie。

我的問題是,這是可能的,如果我完全在JavaScript和ajax數據調用瀏覽器客戶端?比能夠在我的客戶端代碼中添加一個檢查來查看用戶是否已通過身份驗證,否則將他們引導至登錄頁面?

任何想法?謝謝。

回答

1

是的,MVC非常適合在客戶端Ajax工作。

您可以修改您的控制器以返回JSON,並使用jquery ajax調用您可以使用clienside javascript處理返回的json。

更改的最後一行(返回查看(模型))看起來像下面這樣

return Json(new {IsSuccess=successVariable, RedirectUrl=myRedirectUrl, Message=failedErrorMessage}); 

調整你的重定向行,而不是設置myRedirectUrl變量。

更新

如果你想在你的項目中擺脫MVC的(因爲它是這樣一個簡單的任務矯枉過正),添加Web服務(ASMX)到您的網站。裏面創建一個類似下面的一個WebMethod:

[WebMethod] 
[ScriptMethod(ResponseFormat = ResponseFormat.Json)] 
public LogonResponse Logon(LogonModel model){ 
    ... do login logic as your original code... 
    return new LogonResponse() { IsSuccess = successVar, RedirectUrl=myRedirectUrl, Message=failedErrorMsg}; 
} 
+0

我想我希望它是獨立的MVC的。只是希望能夠使用登錄詳細信息調用Web服務,並返回true false和其他身份驗證詳細信息。所以如果想要的話,我可以毫無問題地將它從asp.net mvc中解脫出來。 – Matt

+0

你可以完全擺脫MVC--看到我更新的回覆。 – macsux

+0

嗨,Mac,感謝您的回覆。我猜它是客戶端cookie的東西,我更感興趣(即時推拉數據已經)。即在瀏覽器中存儲用戶身份驗證,並能夠在頁面更改時檢查它(也可以在用戶關閉瀏覽器並且能夠檢查記住我的狀態以查看他們是否應該再次登錄或使用舊憑證時) 。 – Matt

0

你可以做到這一點從客戶端,以及...但如果你的應用需要全面的安全那麼這種模式將對外開放許多安全環孔。

0

當您致電FormsAuthentication.SetAuthCookie()時,它會將Set-Cookie標題發送回客戶端,以便其瀏覽器可以存儲身份驗證Cookie。你可以用JavaScript檢查這個cookie客戶端的存在。如果存在的話,然後繼續,如果不那麼做一個重定向(window.location.href)到登錄頁面,例如:

if (document.cookie.indexOf(".ASPXAUTH") >= 0) alert("You are logged in"); 
else window.location.href = "http://www.domain.com/login";