Как я могу получить идентификатор пользователя, который делает запрос - PullRequest
0 голосов
/ 06 ноября 2019

Как я могу получить идентификатор пользователя, который создает новую статью. Я создал свое промежуточное программное обеспечение для аутентификации уже с 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,
      });
    });
};

Ответы [ 2 ]

0 голосов
/ 06 ноября 2019

Если вы создаете полезную нагрузку , в которой есть идентификатор пользователя, а затем передаете его в jwt.sign(), то вы можете получить идентификатор пользователя, как только вы подтвердите подлинность запрос пользователя путем проверки токена , отправляемого с запросом .

Шаги:

Примечание:

это всего лишь простые шаги для лучшего понимания, игнорирования синтаксиса или чего-либо слишком специфичного для ошибок и т. Д.

  1. Пользователь отправляетзапрос на вход.

  2. вы проверяете учетные данные и отправляете токен на стороне клиента.

    payload = { userId: userId , //rest info}
    
    toekn = jwt.sign(payload, "key")
    
    // send the token back, your methods may vary
    
  3. Запрос пользователя на создание статьии вы получаете токен в запросе, куки, заголовке или любом другом используемом вами механизме

  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 теперь имеет информацию о пользователе, после того, как ваше промежуточное программное обеспечение пройдено, вы можете использовать эту информацию в своей дальнейшей работеионы.

0 голосов
/ 06 ноября 2019

Вы можете получить это из претензий JWT. Вот список стандартных претензий: Претензии JWT .

Тема, электронная почта, имя или псевдоним будут подходящими, в зависимости от вашего случая.

Если вам нужен внутренний идентификатор, такой как первичный ключ базы данных, - используйте идентификатор субъекта для связи с этим внутренним идентификатором. Утечка внутренних ссылок на внешние источники не считается хорошей практикой.

Propsed Architecture

Как получить идентификатор субъекта:

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 раздел 2.2 для части идентификатора токена.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...