我应该使用哪种方法进行登录(身份验证)请求?

问题描述 投票:74回答:5

我想知道在执行登录请求时应该使用哪种http方法,为什么?由于此请求在服务器上创建了一个对象(用户会话),因此我认为它应该是POST,您认为呢?但是由于登录请求应该是幂等的,所以可以是PUT,不是吗?

关于注销请求的相同问题,我应该使用DELETE方法吗?

login logout http-method
5个回答
60
投票

如果您的登录请求是通过提供用户名和密码的用户进行的,则最好使用POST,因为详细信息将在HTTP消息正文而不是URL中发送。尽管仍然会发送纯文本,除非您通过https进行加密。

HTTP DELETE方法是在服务器上删除某些内容的请求。我不认为删除内存中的用户会话确实是想要的。更多用于删除用户记录本身。因此,可能的注销可能只是一个GET,例如www.yoursite.com/logout。


32
投票

我相信您可以将LOGIN&LOGOUT方法转换为基本的CRUD操作CREATE&DELETE。由于您正在创建一个名为SESSION的新资源,并在注销时销毁它:

  1. POST /登录-创建会话
  2. 删除/注销-破坏会话

我绝不会以GET身份登出,因为任何人都可以仅仅通过发送带有IMG标签的电子邮件或链接到存在IMG标签的网站来进行攻击。 (<img src="youtsite.com/logout" />

P.S。很长时间以来,我一直想知道如何创建一个RESTful登录/注销,事实证明这很简单,您可以像我描述的那样进行操作:对CREATE和DELETE方法使用/ session /端点,就可以了。如果您想以一种或另一种方式更新会话,也可以使用UPDATE ...


5
投票

这是我基于REST指南和建议的解决方案:

登录-创建资源

请求:

POST => https://example.com/sessions/

BODY => {'login': '[email protected]', 'password': '123456'}

响应:

http status code 201 (Created)

{'token': '761b69db-ace4-49cd-84cb-4550be231e8f'}

注销]-删除资源

请求:

DELETE => https://example.com/sessions/761b69db-ace4-49cd-84cb-4550be231e8f/

响应:

http status code 204 (No Content)

2
投票

关于注销方法:


0
投票

对于登录请求,我们应该使用POST方法。因为我们的登录数据是安全的,所以需要安全性。使用POST方法时,数据将以捆绑形式发送到服务器。但是在GET方法中,数据先发送到服务器,然后再发送url,例如将url请求附加到后面,所有人都可以看到。

© www.soinside.com 2019 - 2024. All rights reserved.