我有一个由Django REST Framework提供支持的API。
当我成功登录http://127.0.0.1:8000/api-auth/login/
时,服务器会使用302
状态代码回复此请求,并将我重定向到/accounts/profile/
。值得注意的是服务器使用200
来回答失败的登录。
我们如何改变这种行为?我想要
200
或其他确认状态代码来回答200
状态代码意味着" ok"在这里是非常误导的。答案 0 :(得分:0)
如果成功登录,我认为您不应将状态代码从302更改为200。
根据HTTP 302状态代码的W3C documentation:
请求的资源暂时驻留在不同的URI下。 由于重定向有时可能会改变,客户端应该这样做 继续使用Request-URI用于将来的请求。这个回应是 仅在
Cache-Control
或Expires
标头指示时才可缓存 字段。
这是因为您希望使用Request-URI /api-auth/login/
访问您的个人资料资源,但该资源当前存在于临时位置或URI /accounts/profile/
。现在,由于资源被发现但是在临时位置,即临时移动,它返回302状态代码。
此外,使用302状态代码更好,因为它与大多数浏览器兼容。
答案 1 :(得分:0)
请查看我对问题的评论以澄清(我不想通过复制粘贴回答内容)。
至于在响应中检测登录成功的问题,我们有三个基本情况 -
1)成功登录 - 页面被重定向到个人资料,302被发送。只需检查响应状态代码302。
2)登录失败(凭据无效) - 发送401(未经授权的请求)并检查相同的内容。
3)登录失败(有效凭据但由于各种原因未授权访问该页面) - 发送403(禁止用户不允许用户访问该页面)并检查响应状态代码403。
希望它有所帮助,请通过Http响应状态代码。