我开始研究nodejs,我遇到了一个问题, 当我在'postman'上发布我的登录时,我收到了成功消息,但令牌内容为空。 这是我的server.js代码:
var express = require('express');
var bodyParser = require('body-parser');
var morgan = require('morgan');
var config = require('./config');
var mongoose = require('mongoose');
var app = express();
.......
app.use(bodyParser.urlencoded({
extended: true
}));
app.use(bodyParser.json());
这是我的api代码:
var jsonwebtoken = require('jsonwebtoken');
function createToken(user){
jsonwebtoken.sign({
_id: user._id,
name: user.name,
username: user.username
}, secretKey,{
expiresIn: '144000000m'
});
return jsonwebtoken;
};
api.post('/login',function(req,res){
User.findOne({
username: req.body.username
}).select('password').exec(function(err,user){
if (err)
{
res.send(err);
}
else if (!user) {
res.send({message : "User dosen't exist."});
}
else if (user){
var validPassword = user.comparePassword(req.body.password);
if (!validPassword)
{
res.send({ message : "Password is incorrect." });
}
else
{
///// token
var token= createToken(user);
if (token)
{
res.json({
success: true,
message: "Successfuly login!",
token: token
});
}
else
{
console.log('error');
}
}
}
})
});
事实上,最后我从“邮递员”那里收到了这条消息:
{
"success": true,
"message": "Successfuly login!",
"token": {}
}
如您所见,令牌为空。 谢谢!
答案 0 :(得分:0)
在createToken()中,您需要返回令牌本身而不是导入的库,例如:
function createToken(user){
return jsonwebtoken.sign({
_id: user._id,
name: user.name,
username: user.username
}, secretKey,{
expiresIn: '144000000m'
});
}