Closed Kadiem closed 5 years ago
Passport.js
const JwtStrategy = require('passport-jwt').Strategy; const ExtractJwt = require('passport-jwt').ExtractJwt; const User = require('../models/User'); const config = require('../config/mongoose'); module.exports = function(passport){ let opts = {}; opts.jwtFromRequest = ExtractJwt.fromAuthHeaderWithScheme("JWT"); opts.secretOrKey = config.secret; passport.use(new JwtStrategy(opts, (jwt_payload, done) => { console.log(jwt_payload); User.getUserById(jwt_payload.data._id, (err, user) => { if(err){ return done(err, false); } if(user){ return done(null, user); } else { return done(null, false); } }); })); };
User.js
const mongoose = require('mongoose'); const bcryptjs = require('bcryptjs'); const config = require('../config/mongoose'); const UserSchema = mongoose.Schema({ name: { type: String }, email: { type: String, required: true }, username: { type: String, required: true }, password: { type: String, required: true } }); const User = module.exports = mongoose.model('User', UserSchema); module.exports.getUserById = function (id, callback) { User.findById(id, callback); }; module.exports.getUserByUsername = function (username, callback) { const query = {username: username}; User.findOne(query, callback); }; module.exports.addUser = function (newUser, callback) { bcryptjs.genSalt(10, function (err, salt) { bcryptjs.hash(newUser.password, salt, (err, hash) => { if(err) throw err; newUser.password = hash; newUser.save(callback) }) }) }; module.exports.comparePassword = function (candidatePassword, hash, callback) { bcryptjs.compare(candidatePassword, hash, (err, isMatch) => { if(err) throw err; callback(null, isMatch); }) };
Users.js
const express = require('express'); const router = express.Router(); const passport = require('passport'); const User = require('../models/User'); const config = require('../config/mongoose'); const JWT = require('jsonwebtoken'); // register router.post('/register', (req, res, next) => { let newUser = new User({ name: req.body.name, email: req.body.email, username: req.body.username, password: req.body.password }); User.addUser(newUser, (err, user) => { if(err){ res.json({success: false, msg: 'Failed to register user.'}); } else { res.json({success: true, msg: 'User registered'}); } }); }); // authenticate router.post('/authenticate', (req, res, next) => { const username = req.body.username; const password = req.body.password; User.getUserByUsername(username, (err, user) => { if(err) throw err; if(!user){ return res.json({success: false, msg: 'User not found'}); } User.comparePassword(password, user.password, (err, isMatch) => { if(err) throw err; if(isMatch){ const token = JWT.sign({data: user}, config.secret, { expiresIn: 604800 // 1 week }); res.json({ success: true, token: 'JWT ' + token, user: { id: user._id, name: user.name, username: user.username, email: user.email } }); } else { return res.json({success: false, msg: 'User not authenicated'}); } }); }); }); // profile router.get('/profile', passport.authenticate('jwt', {session:false}), (req, res, next) => { res.json({user: req.user}); }); module.exports = router;
Nothing is comming out and I have been looking at the code for hours!
Passport.js
User.js
Users.js
Nothing is comming out and I have been looking at the code for hours!