【问题标题】:jsonwebtoken doesn't retrieve a tokenjsonwebtoken 不检索令牌
【发布时间】:2017-10-13 20:07:14
【问题描述】:

我正在使用nodejs和sequelize创建简单的用户注册,我已经登录并注册了,但是当登录成功时我没有得到任何令牌。

我已尝试控制台记录令牌以查看是否得到一些结果,但控制台中没有与令牌相关的响应。

这是我的代码:

var express = require('express');
var User = require('../../models').User;
var router = express.Router();
var jwt = require('jsonwebtoken');
var app = require('../../app');

/*var token = jwt.sign(user, app.get('superSecret'), {
  expiresInMinutes: 1440 // expires in 24 hours
});*/

router.post('/', function (req, res, next) {
  if (JSON.stringify(req.body) == "{}") {
    return res.status(400).json({ Error: "Login request body is empty" });
  }
  if (!req.body.username || !req.body.password) {
    return res.status(400).json({ Error: "Missing fields for login" });
  }


  // search a user to login
  User.findOne({ where: { username: req.body.username} }) // searching a user with the same username and password sended in req.body
    .then(function (user) {
      if (user && user.validPassword(req.body.password)) {
        //return res.status(200).json({ message: "loged in!" }); // username and password match

        // create a token
        var token = jwt.sign(user, app.get('superSecret'), {
          expiresInMinutes: 1440 // expires in 24 hours
        });

        // return the information including token as JSON
        res.json({
          success: true,
          message: 'Enjoy your token!',
          token: token
        });
      }
      else{
        return res.status(401).json({ message: "Unauthorized" }); // if there is no user with specific fields send
      }
    }).catch(function (err) {
      return res.status(500).json({ message: "server issues when trying to login!" }); // server problems
    });
});

module.exports = router;

【问题讨论】:

  • 您无法获得响应或您无法看到响应中的令牌?
  • 我没有看到令牌,如果我有生成令牌的代码,它就会进入我的捕获中,奇怪
  • 传递给 jwt.sign 的第二个参数是秘密。我不确定你想用 app.get('superSecret') 做什么。此外,我建议不要将包括密码在内的整个用户对象传递到 jwt,因为您可以在浏览器中访问它。
  • 那么我应该将什么传递给 jwt.sign,只是 id?
  • 是的,您应该避免在有效负载中发送整个用户对象,因为它可能包含密码。如果代码以 catch 结尾,则出于某种原因存在异常。

标签: javascript json node.js express json-web-token


【解决方案1】:

您应该使用 express-jwt 库。 https://www.npmjs.com/package/express-jwt 它是express的中间件。示例:

    var jwt = require('express-jwt');

    app.get('/protected',
          jwt({secret: 'shhhhhhared-secret',
               credentialsRequired: false,
               getToken: (req) => req.cookies.id_token // when cookies are using. 'id_token' is cookie's name
    }),
          function(req, res) {
            if (!req.user.admin) return res.sendStatus(401);
            res.sendStatus(200);
          });

你也可以写成 app.use(...) 或 app.anyRequest(...)

【讨论】:

    猜你喜欢
    • 2016-10-18
    • 2019-05-23
    • 2020-10-29
    • 1970-01-01
    • 2016-09-27
    • 2018-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多