Angularjs   发布时间:2022-04-20  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了angularjs – Django Rest Framework – 为什么在尝试使用不正确的凭据登录用户时会返回200状态代码?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
这是我的URLs.py:

url(r'^api-auth/',include('rest_framework.urls',namespace='rest_framework')),

我的主页上有一个表单,用户可以在其中键入用户名和密码.单击提交按钮时,AngularJS会使用用户对象(用户名和密码)向“api-auth / login /”发送POST请求:

$http.post("/api-auth/login/",self.loginuser)
    .error(function(data,status,headers,config) {
        console.log(data);
     });

用户提交错误用户名和密码(用户名和密码不存在或不匹配)时,Django Rest Framework返回200 OK而不是204 No Content,404或401 Unauthorized(在这文章中,它表示401是要返回的正确状态代码What’s the appropriate HTTP status code to return if a user tries logging in with an incorrect username / password,but correct format?).

根据这里:http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html在第9.5节POST中,它说“在这种情况下,200(OK)或204(No Content)是适当的响应状态,具体取决于响应是否包括描述结果的实体.”

如果数据存在,我处理错误并记录数据(我在JS中执行了console.log(data)),但是没有记录数据,这意味着(根据我的理解)没有数据被发送/响应不包括描述的实体结果.

那么为什么DjangoRestFramework会返回200而不是204 No Content(或者404或401,根据我链接的其他SO帖子应该返回什么)?

解决方法

你的问题中有几件事情混杂在一起.首先,您使用的技术观点,以及您解释答案的方式.

1)意见

这是一个快速的.通过将数据发送到/ api-auth / login / it DRF的可浏览API的登录视图来使用的视图.这个视图实际上是Django的auth应用程序(django.contrib.auth.views.login)附带的视图,它假定它正在处理用户,手动浏览API.

也就是说:使用GET调用它构建一个空的html表单,使用POST发回表单将触发表单验证,这可能会以重新显示的形式结束(200 Ok,包含文档),或者重定向要发回(302找到空的内容).

这就是你的数据为空的原因:服务器发送一个HTML文档,而你的angular可能试图解析一些JSON对象.

您使用的表单视图绝对不能从脚本中调用.这可以完成,但您需要相应地处理结果,这意味着分析返回的html页面以查找错误消息.乱.

如果要轻松地从脚本访问它,则应构建自己的登录视图.

2)文件与要求

在这里处理两个不同级别的语义.

>请求的含义.
>请求中包含的文档的含义.

http错误代码在请求的上下文中是有意义的.它们发生在较低的水平.例如,返回401代码意味着“在执行此请求之前需要有效的身份验证凭据”.

所以在这里,这基本上意味着“在处理您的登录请求之前,您必须拥有有效的身份验证凭据”.

它可能有意义,但仅限于您有两层身份验证的环境中.在第二层登录请求通过之前,您需要具有对第一层有效的身份验证凭据.在这种情况下,如果您尝试使用第二层登录而未被第一层识别,则可以获得401.

那么,REST如何适应?

当应用于http时,REST的概念是尝试匹配请求级语义和文档级语义.它特别适合,因为每个REST概念都有匹配的http动词,http是可缓存的,客户端 – 服务器,……和……无状态.

无状态意味着http和REST都没有登录的概念.登录是一种抽象,这通常意味着我们使用如下所示的工作流:

>我们对某些端点进行身份验证(登录/密码,质询,oauth等).
>端点返回一些授权令牌
>我们将每个下一个请求的授权令牌发送到服务器.

但事实是,每个请求都必须由服务器授权.也就是说,服务器将始终通过授权请求开始,然后再查看内部的内容.如果此步骤失败,则401是足够的响应.

除了步骤#1.此请求没有授权步骤.必须对其进行处理,必须检索并检查登录/密码,并且根据结果,服务器可能决定发回授权令牌.

那么,如果选择不这样做,哪些错误代码是合适的?嗯,有几个你可以选择:

> 200好的.登录请求已成功处理并产生错误消息,这是一个包含结果的文档.然后,您的脚本将读取文档(例如,可能是JSON对象)以查看它是否有错误或授权令牌.
> 204没有内容.登录请求已成功处理,但没有产生任何内容,当然也没有授权令牌.奇怪的选择,但正确.
> 400不良请求.登录请求未成功处理.

唯一可以肯定的是,401不是一个选择. 401意味着你不允许尝试登录.不是登录失败.

大佬总结

以上是大佬教程为你收集整理的angularjs – Django Rest Framework – 为什么在尝试使用不正确的凭据登录用户时会返回200状态代码?全部内容,希望文章能够帮你解决angularjs – Django Rest Framework – 为什么在尝试使用不正确的凭据登录用户时会返回200状态代码?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。