【问题标题】:AngularJS and Web API form authenticationAngularJS 和 Web API 表单认证
【发布时间】:2016-10-20 23:19:51
【问题描述】:

我是 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 无法理解那条路线,所以我无法继续前进。

关于如何解决这个问题的任何线索,或者可能有更好的方法。

谢谢

【问题讨论】:

  • 你做错了。您可以创建一个自定义授权过滤器,您应该在其中编写授权代码,如果失败,您应该返回一个带有标志(例如 AuthorizationError)的 JSON 响应,以便您的客户端知道授权失败。
  • 所以,你告诉我的是,我应该向客户端发送一个令牌,而不是做所有那些垃圾表单身份验证,并且在每个帖子或获取我应该使用自定义检查服务器中的令牌在控制器中过滤?谢谢

标签: angularjs asp.net-mvc-4 asp.net-web-api angular-routing


【解决方案1】:

您可以使用任何您喜欢的身份验证/授权机制。但是当您调用$http.get()$http.post() 时,您希望收到一个JSON 对象。但是,如果您未通过身份验证,您将被重定向到登录页面,该页面是一个 HTML 页面。因此,您检查成功的代码将失败。

您需要创建一个新的自定义授权过滤器(如 MyAuthorize),通过任何可用技术(SimpleMembership、OAuth 等)对您的用户进行身份验证/授权,如果身份验证失败,则返回 JSON 对象而不是返回 RedirectResult带有错误标志。然后您可以在每个$http.get()$http.post() 之后检查该标志,并从客户端重定向用户。我们总是开发自己的通信服务,调用$http.get()$http.post,并且总是在那里进行检查。

【讨论】:

  • 您知道我可以看到的任何链接或代码以便更好地理解吗?我真的很感激。
猜你喜欢
  • 2014-10-21
  • 1970-01-01
  • 2014-02-10
  • 2015-03-04
  • 1970-01-01
  • 1970-01-01
  • 2014-08-03
  • 1970-01-01
相关资源
最近更新 更多