Login 我应该使用什么方法进行登录(身份验证)请求?
我想知道在执行登录请求时应该使用哪个http方法,以及为什么?因为这个请求在服务器上创建了一个对象(一个用户会话),所以我认为它应该是POST,您认为呢?但是由于登录请求应该是幂等的,所以它可以被放置,不是吗Login 我应该使用什么方法进行登录(身份验证)请求?,login,logout,http-method,Login,Logout,Http Method,我想知道在执行登录请求时应该使用哪个http方法,以及为什么?因为这个请求在服务器上创建了一个对象(一个用户会话),所以我认为它应该是POST,您认为呢?但是由于登录请求应该是幂等的,所以它可以被放置,不是吗 对于注销请求,同样的问题是,我是否应该使用删除方法?如果您的登录请求是通过提供用户名和密码的用户发出的,那么最好是通过POST,因为详细信息将在HTTP消息正文而不是URL中发送。尽管它仍将以纯文本发送,除非您通过https加密 HTTP DELETE方法是在服务器上删除某些内容的请求。我
对于注销请求,同样的问题是,我是否应该使用删除方法?如果您的登录请求是通过提供用户名和密码的用户发出的,那么最好是通过POST,因为详细信息将在HTTP消息正文而不是URL中发送。尽管它仍将以纯文本发送,除非您通过https加密
HTTP DELETE方法是在服务器上删除某些内容的请求。我不认为删除内存中的用户会话是它真正想要的;此外,它还用于删除用户记录本身。因此,潜在的注销可能只是一个GET,例如www.yoursite.com/logout。我相信您可以将登录和注销方法转换为基本的CRUD操作创建和删除。由于您正在创建一个名为SESSION的新资源,并在注销时将其销毁:
)
附言。
很长时间以来,我一直在想,如何创建一个RESTful登录/注销,结果很简单,就像我描述的那样:使用/session/端点和create和DELETE方法,就可以了。如果您想以某种方式更新会话,也可以使用UPDATE 对于登录请求,我们应该使用POST方法。因为我们的登录数据是安全的,这需要安全性。使用POST方法时,数据以捆绑方式发送到服务器。但是在GET方法中,数据被发送到服务器,然后是像append with url请求这样的url,每个人都会看到它 因此,对于安全的身份验证和授权过程,我们应该使用POST方法 我希望这个解决方案能对你有所帮助
谢谢以下是我基于REST指南和建议的解决方案: 登录-创建资源 请求:
POST => https://example.com/sessions/
BODY => {'login': 'login@example.com', 'password': '123456'}
DELETE => https://example.com/sessions/761b69db-ace4-49cd-84cb-4550be231e8f/
答复:
http status code 201 (Created)
{'token': '761b69db-ace4-49cd-84cb-4550be231e8f'}
http status code 204 (No Content)
注销-删除资源
请求:
POST => https://example.com/sessions/
BODY => {'login': 'login@example.com', 'password': '123456'}
DELETE => https://example.com/sessions/761b69db-ace4-49cd-84cb-4550be231e8f/
答复:
http status code 201 (Created)
{'token': '761b69db-ace4-49cd-84cb-4550be231e8f'}
http status code 204 (No Content)
关于注销的方法: 在Spring(Java框架)文档中,他们指出POST请求是首选,因为GET使您容易受到CSRF(跨站点请求伪造)的攻击,并且用户可能会注销 添加CSRF将更新LogoutFilter,使其仅使用HTTP POST。这确保了注销需要CSRF令牌,并且恶意用户无法强制注销您的用户 见:
登录时也应该使用POST(正文可以加密,请参阅其他答案)。对于登录,我使用POST,下面是我的登录方法代码 我在Express和Mongoose中使用了Nodejs
your router.js
const express = require("express");
const router = express.Router();
router.post("/login", login);
your controller.js
export.login = async(req, res) => {
//find the user based on email
const {email, password} = req.body;
try{
const user = awaitUser.findOne({email});
if(user==null)
return res.status(400).json({err : "User with
email doesnot exists.Please signup"});
}
catch(error){
return res.status(500).json({err :
error.message});
}
//IF EVERYTHING GOES FINE, ASSIGN YOUR TOKEN
make sure you have JWT installed
const token = jwt.sign({_id: user._id}, YOUR_SECRET_KEY);
res.cookie('t');
const {_id, name, email} = user;
return res.json({token, user : {_id, email, name}});
}
关于登录请求,我在我的问题中添加了一些东西,说它可以放置,我对GET毫不犹豫+对于详细的回答,我认为PUT实际上是在服务器上创建了一些东西。因此,在一个宁静的意义上,我想这就是你可以使用的,如果创建一个新用户。并且应该在指定的URL处创建用户。然而,对于像http会话这样的真正瞬态的东西,我会通过POST登录。我认为http会话是瞬态的这一事实说明了你的观点。我会照你说的做,谢谢。我不同意注销应该是GET,因为只需发送一封带有src属性为“www.yoursite.com/LOGOUT”的图像标签的用户电子邮件,就可以注销该用户。GET没有多大意义。关于这一点的另一个输入可以在这里找到:使用现代浏览器工具执行删除请求几乎和执行GET请求一样简单,其中一些工具可以直接在浏览器中使用,比如直接从浏览器控制台发出XHR请求。因为您谈到了语义(这一点也很重要)以及数据库,所以仍然向上投票。