成功登录后如何使DRF返回200而不是302?

时间:2015-09-09 16:46:06

标签: django django-rest-framework

我有一个由Django REST Framework提供支持的API。

当我成功登录http://127.0.0.1:8000/api-auth/login/时,服务器会使用302状态代码回复此请求,并将我重定向到/accounts/profile/。值得注意的是服务器使用200来回答失败的登录。

我们如何改变这种行为?我想要

  • 成功的登录,可通过200或其他确认状态代码来回答
  • 失败的登录使用一些适当的错误代码回答,而不是" ok"。我认为200状态代码意味着" ok"在这里是非常误导的。

2 个答案:

答案 0 :(得分:0)

如果成功登录,我认为您不应将状态代码从302更改为200。

根据HTTP 302状态代码的W3C documentation

  

请求的资源暂时驻留在不同的URI下。   由于重定向有时可能会改变,客户端应该这样做   继续使用Request-URI用于将来的请求。这个回应是   仅在Cache-ControlExpires标头指示时才可缓存   字段。

这是因为您希望使用Request-URI /api-auth/login/访问您的个人资料资源,但该资源当前存在于临时位置或URI /accounts/profile/。现在,由于资源被发现但是在临时位置,即临时移动,它返回302状态代码。

此外,使用302状态代码更好,因为它与大多数浏览器兼容。

答案 1 :(得分:0)

请查看我对问题的评论以澄清(我不想通过复制粘贴回答内容)。

至于在响应中检测登录成功的问题,我们有三个基本情况 -

1)成功登录 - 页面被重定向到个人资料,302被发送。只需检查响应状态代码302。

2)登录失败(凭据无效) - 发送401(未经授权的请求)并检查相同的内容。

3)登录失败(有效凭据但由于各种原因未授权访问该页面) - 发送403(禁止用户不允许用户访问该页面)并检查响应状态代码403。

希望它有所帮助,请通过Http响应状态代码。