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

Login 我应该使用什么方法进行登录(身份验证)请求?,login,logout,http-method,Login,Logout,Http Method,我想知道在执行登录请求时应该使用哪个http方法,以及为什么?因为这个请求在服务器上创建了一个对象(一个用户会话),所以我认为它应该是POST,您认为呢?但是由于登录请求应该是幂等的,所以它可以被放置,不是吗 对于注销请求,同样的问题是,我是否应该使用删除方法?如果您的登录请求是通过提供用户名和密码的用户发出的,那么最好是通过POST,因为详细信息将在HTTP消息正文而不是URL中发送。尽管它仍将以纯文本发送,除非您通过https加密 HTTP DELETE方法是在服务器上删除某些内容的请求。我

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


对于注销请求,同样的问题是,我是否应该使用删除方法?

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


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

我相信您可以将登录和注销方法转换为基本的CRUD操作创建和删除。由于您正在创建一个名为SESSION的新资源,并在注销时将其销毁:

  • POST/登录-创建会话
  • 删除/注销-销毁会话
  • 我永远不会以GET的身份注销,因为任何人只要发送一封带有IMG标签的电子邮件或链接到存在这样一个IMG标签的网站,就可以发起攻击。(

    附言。
    很长时间以来,我一直在想,如何创建一个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请求。因为您谈到了语义(这一点也很重要)以及数据库,所以仍然向上投票。