I started studying nodejs and I ran into a problem, when i post my login on 'postman' i got success message, but the token content is empty. this is my server.js code:
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());
and this is my api code:
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');
}
}
}
})
});
In fact at the end I get this message from 'postman':
{
"success": true,
"message": "Successfuly login!",
"token": {}
}
as you can see, the token is empty. thanks!
In createToken(), you need to return the token itself instead of the imported library, e.g:
function createToken(user){
return jsonwebtoken.sign({
_id: user._id,
name: user.name,
username: user.username
}, secretKey,{
expiresIn: '144000000m'
});
}