如何获取发出请求的用户的ID

如何获取创建新文章的用户的ID。我已经使用JWT创建了身份验证中间件。这是我的创建文章代码。

exports.createArticle = (req,res) => {
  const { title,article } = req.body;
  const query = {
    text: 'INSERT INTO article (title,article) VALUES ($1,$2) RETURNING *',values: [title,article],};
  pool
    .query(query)
    .then((response) => {
      const { id,created_on } = response.rows[0];
      res.status(201).json({
        message: 'Article successfully posted',articleId: id,createdOn: created_on,title,});
    })
    .catch((error) => {
      res.status(400).json({
        error,});
    });
};
tammyluxiuliang 回答:如何获取发出请求的用户的ID

您可以从JWT声明中获得该信息。以下是标准声明的列表:JWT Claims

主题,电子邮件,姓名或昵称将是合适的,具体取决于您的情况。

如果需要内部ID(例如数据库主键),请使用主题ID链接到该内部ID。最好不要将内部引用泄漏给外部。

Propsed Architecture

如何获取主题ID:

const jwt = require("jsonwebtoken");
// this is just for test,get a real verified token from your middleware
const testToken = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c";
const token = jwt.decode(testToken);
let subjectId = token.sub; // then lookup and insert into database

您可以在此处阅读OpenID Connect规范以了解更多信息:OpenID Connect Specification第2.2节中的ID令牌部分。

,

如果您要创建一个其中包含用户ID的有效载荷,然后将其传递给jwt.sign(),则在您进行身份验证后即可获取该用户的ID。 通过验证随请求一起发送的令牌来验证用户的请求。

步骤:

  

注意:

     

这只是一个简单的步骤,可以帮助您更好地理解,   忽略语法或对错误等太过具体的内容。

  1. 用户发送登录请求。

  2. 您验证凭据并将令牌发送到客户端。

    payload = { userId: userId,//rest info}
    
    toekn = jwt.sign(payload,"key")
    
    // send the token back,your methods may vary
    
  3. 用户创建文章的请求,并且您在请求,cookie,标题或您使用的任何其他机制中收到令牌

  4. 您使用中间件通过令牌对请求进行身份验证

    jwt.verify(token,"key",(err,decodedUserInfo) => {
         //dont proceed if err just throw error
    
         //this decodedInfo has all the info that you have in payload while creating the token in step 2.
    
          req.user = decodedUserInfo;
          next();
    }
    
  5. 由于您的req对象现在具有用户信息,一旦传递了中间件,就可以在后续操作中使用此信息。

本文链接:https://www.f2er.com/3151338.html

大家都在问