0

我正在学习一个教程: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" });
  }
}
4

1 回答 1

0

首先,我得到了答案。我想知道我在这个问题中的标签如何吸引更少的 SO 用户。在我看来,当您在移动开发标签中时,您可以更快地获得答案。

答案是该项目以某种方式需要错误的库?在示例项目中,它具有:

const JWT = require('jws');

但在查看了更多 JWT 示例项目后,我意识到应该是:

const jwt = require('jsonwebtoken');

解决了!

于 2020-05-04T19:15:59.333 回答