Search code examples
node.jstoken

nodejs token is empty


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!


Solution

  • 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'
        });
    }