Как разрешить несанкционированную ошибку токена Passport-jwt? - PullRequest
0 голосов
/ 11 февраля 2019

Я постоянно получаю «несанкционированную» ошибку при аутентификации с использованием JWT.Ниже код моего контроллера:

exports.loginPost = async (req, res) => {
  winston.info('Calling loginPost()...');

  passport.authenticate('local', { session: false }, (err, user, info) => {
    if (err) {
      return utils.errorHandler(res, err);
    } else if (!user) {
      return utils.errorHandler(res, {
        statusCode: 403,
        message: 'Incorrect username or password.'
      });
    } 
    const token = jwt.sign(user, sharedSecret, { expiresIn: '24h' });
    //req.user = user;
    return res.json({ user, token });
    // req.login(user, { session: false }, (err) => {
    //   if (err) {
    //     res.send(err);
    //   }
    //   // generate a signed json web token with the contents of user object and return it in the response
    //   const token = jwt.sign(user, sharedSecret, { expiresIn: '24h' });
    //   //req.user = user;
    //   return res.json({ user, token });
    // });
  })(req, res);
};

exports.isUserLoggedIn = async (req, res) => {
  let login  = {"message": "all good !"}
  console.log(req)
  return res.status(200).json(login);
  //return res.status(200).json(req.user);
};

и сценарий стратегии passport.js выглядит следующим образом:

passport.use(new LocalStrategy({
  usernameField: 'username',
  passwordField: 'password'
}, async function (username, password, cb) {
  //this one is typically a DB call. Assume that the returned user object is pre-formatted and ready for storing in JWT
  try {
    let user = await userService.getUserWithPassword(username, password);
    console.log("passport.js: ",user);

    if (!user || user.walletKey !== password) {
      throw { statusCode: 403, message: 'Incorrect username or password.' };
    }
    
    // // purge password field
    // delete user.currentPassword;

    return cb(null, user, { message: 'Logged In Successfully' });
  } catch (err) {
    cb(err);
  }
}));

passport.use(new JWTStrategy({
  jwtFromRequest: ExtractJWT.fromAuthHeaderAsBearerToken(),
  secretOrKey: sharedSecret,
  passReqToCallback: true
},
  async function (req, jwtPayload, cb) {
    // Return user object from the JWTPayload
    try {
      let user = await userService.getUserWithPassword(jwtPayload.walletName, jwtPayload.walletKey);
      console.log("passport.js: ",user);
      req.user = user
      return cb(null, user); //jwtPayload
    } catch(err){
      return cb(err,false);
    }
    
  }
));

Я могу успешно сгенерировать токен, однако при вызове метода isUserLoggedIn с использованием токена Bearer появляется сообщение об ошибке unauthorized.Я не делаю традиционный вызов БД для входа в систему, а просто создаю учетную запись в узлах пула Hyperledger-Indy.Использование промежуточного программного обеспечения Swagger Express в приложении Node.js.Добавление сценария метода isUserLoggedIn ниже:

exports.isUserLoggedIn = async (req, res) => {
  //let login  = {"message": "all good !"}
  console.log(req)
  return res.status(200).json(req.user);
  //return res.status(200).json(req.user);
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...