2
votes

I've been trying to test the protected routes by using passport and passport-jwt.

I've got it to the point where the token is being generated when a user tries to log in and tested it in Postman.

I've created a route and passed in as an argument passport.authenticate with the jwt strategy and am getting errors all over the place.

In my main server.js, I require passport:

passport = require('passport');

app.use(passport.initialize());

// passport config
require('./config/passport')(passport);

My folder structure is this: enter image description here

in my passport config file, i have this:

const jwtStrategy =  require('passport-jwt').Strategy;
const ExtractJwt = require('passport-jwt').ExtractJwt;
const mongoose = require('mongoose');
const User = mongoose.model('users')
const keys = require('../config/keys');

const opts = {};
opts.jwtFromRequest = ExtractJwt.fromAuthHeaderAsBearerToken();
opts.secretOrKey = keys.secretOrKey;

module.export = passport => {
    passport.use(
        new jwtStrategy(opts, (jwt_payload, done) => {
        console.log(jwt_payload);
    }));
};

And my route is this:

// @route get to /users/current
// @desc: return the current user (who the jwt token belongs to)
// @access: should be public
router.get('/current', 
    passport.authenticate('jwt', { session: false }), 
    (req, res) => {
        res.json({msg: "Success"})
    }
);

The first error I can't seem to get passed is this in the console:

require('./config/passport')(passport);
                            ^

TypeError: require(...) is not a function

In postman, when I try to go to /users/current and pass in a confirmed bearer token, I get this:

Error: Unknown authentication strategy "jwt"
   at attempt

3

3 Answers

1
votes

in passport config file you have typo module.export actualy its module.exports thats why after require it does not recongnizing it as function

0
votes

change the module.export to

module.exports = passport => {
    passport.use(
        new jwtStrategy(opts, (jwt_payload, done) => {
        console.log(jwt_payload);
    }));
};
0
votes

its module.exports and not module.export.

The module.exports property can be assigned a new value (such as a function or object).

module.exports = class Square {
constructor(width) {
this.width = width;
}
area() {
return this.width ** 2;
}
};

nodejs modules documentation reference