«ErrorTypeError: Не удается прочитать свойство 'alg' из неопределенного" JWT - PullRequest
0 голосов
/ 04 мая 2020

Я следую учебному пособию: https://github.com/eXtremeXR/APIAuthenticationWithNode/tree/Part_%2312

И во время локальной части регистрации произошла ошибка

Необработанный отказ от обещания устарели.

Но мне удалось решить эту проблему с помощью блоков try-catch . Но опять же из-за основной ошибки:

TypeError: Cannot read property 'alg' of undefined

Каждый мой запрос возвращает ошибку, даже если регистрация действительно успешна.

Ошибка указывает мне на этот блок:

signToken = user => {
  return JWT.sign({
    iss: 'CodeWorkr',
    sub: user.id,
    iat: new Date().getTime(), // current time
    exp: new Date().setDate(new Date().getDate() + 1) // current time + 1 day ahead
  }, JWT_SECRET);
}

Что является причиной этого и как я могу ее решить?


Вот полный код контроллера:

const JWT = require('jws');
const User = require('../models/user');
const { JWT_SECRET } = require('../configuration');

signToken = user => {
  return JWT.sign({
    iss: 'CodeWorkr',
    sub: user.id,
    iat: new Date().getTime(), // current time
    exp: new Date().setDate(new Date().getDate() + 1) // current time + 1 day ahead
  }, JWT_SECRET);
}

module.exports = {
  signUp: async (req, res, next) => {
    try {
      const { email, password } = req.body;

      // Check if there is a user with the same email
      const foundUser = await User.findOne({ "local.email": email });
      if (foundUser) { 
        return res.status(403).json({ error: 'Email is already in use'});
      }

      // Create a new user
      const newUser = new User({ 
        method: 'local',
        local: {
          email: email, 
          password: password
        }
      });

      await newUser.save();

      // Generate the token
      const token = signToken(newUser);
      // Respond with token
      res.status(200).json({ token });
    } catch (err) {
      res.status(500).send({
        message: "Error" + err
      })
    }
  },

  signIn: async (req, res, next) => {
    // Generate token
    const token = signToken(req.user);
    res.status(200).json({ token });
  },

  googleOAuth: async (req, res, next) => {
    // Generate token
    const token = signToken(req.user);
    res.status(200).json({ token });
  },

  facebookOAuth: async (req, res, next) => {
    // Generate token
    const token = signToken(req.user);
    res.status(200).json({ token });
  },

  secret: async (req, res, next) => {
    console.log('I managed to get here!');
    res.json({ secret: "resource" });
  }
}

1 Ответ

0 голосов
/ 04 мая 2020

Во-первых, я получил ответ. Мне интересно, как мои теги в этом вопросе привлекают гораздо меньше пользователей SO. Мне кажется, что вы можете быстрее получать ответы, когда находитесь в тегах разработки для мобильных устройств.

Ответ заключается в том, что проект как-то требует неправильной библиотеки? В примере проекта он имеет:

const JWT = require('jws');

Но, посмотрев еще несколько примеров проектов JWT, я понял, что это должно быть:

const jwt = require('jsonwebtoken');

решено!

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