[英]AngularJS and Web API form authentication
我是AngularJS的新手,我開始創建一個示例應用程序,這個應用程序有2個視圖:
我的AngularJS虛擬應用程序一切正常,但現在我開始在服務器端實現登錄功能:
[HttpPost]
public JsonResult Login(string credentials)
{
bool returnVal = false;
if (!string.IsNullOrEmpty(credentials))
{
FormsAuthentication.SetAuthCookie("DUMMY USER", true);
}
return Json(new
{
success = returnVal
},
JsonRequestBehavior.AllowGet);
}
在歡迎控制器上,我有:
[Authorize]
public JsonResult GetPersons()
{
return Json(new
{
success = false
},
JsonRequestBehavior.AllowGet);
}
然后為了實現表單身份驗證,我必須在Web.Config中設置:
<authentication mode="Forms">
<forms loginUrl="/login" name=".ASPXFORMSAUTH" protection="All" timeout="1" slidingExpiration="true" />-->
</authentication>
問題是,當這樣做時,它將重定向URL,因此我收到以下錯誤:
GET http://localhost:21871/login?ReturnUrl=%2fperson%2fGetPersons 404 (Not Found)
而且因為AngularJS無法理解那條路線,所以我無法繼續前進。
有關如何解決這個問題的任何線索,或者有更好的方法來解決這個問題。
謝謝
您可以使用任何您喜歡的身份驗證/授權機制。 但是當你調用$http.get()
或$http.post()
你希望收到一個JSON對象。 但是,如果您未經過身份驗證,則會被重定向到登錄頁面,這是一個HTML頁面。 因此,檢查成功的代碼將失敗。
您需要創建一個新的自定義授權過濾器(如MyAuthorize),通過任何可用的技術(SimpleMembership,OAuth等)對您的用戶進行身份驗證/授權,如果身份驗證失敗,則返回帶有Error標志的JSON對象,而不是返回RedirectResult
。 然后,您可以在每個$http.get()
或$http.post()
之后檢查該標志,並從客戶端重定向用戶。 我們總是開發自己的通信服務,調用$http.get()
或$http.post
並始終在那里進行檢查。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.