jaredhanson / passport-local

Username and password authentication strategy for Passport and Node.js.
https://www.passportjs.org/packages/passport-local/?utm_source=github&utm_medium=referral&utm_campaign=passport-local&utm_content=about
MIT License
2.73k stars 497 forks source link

passport.authenticate(requireLogin) does not work, when called to http://localhost:8080/api/auth/login shows bad request. #154

Open jainAdijain opened 7 years ago

jainAdijain commented 7 years ago

passport.js

var passport = require('passport');
var User = require('../app/models/user');
var config = require('./auth');
var JwtStrategy = require('passport-jwt').Strategy;
var ExtractJwt = require('passport-jwt').ExtractJwt;
var LocalStrategy = require('passport-local').Strategy;

var localOptions = {
    usernameField: 'email'
};

var localLogin = new LocalStrategy(localOptions, function(email, password, done){

    User.findOne({
        email: email
    }, function(err, user){

        if(err){
            return done(err);
        }

        if(!user){
            return done(null, false, {error: 'Login failed. Please try again.'});
        }

        user.comparePassword(password, function(err, isMatch){

            if(err){
                return done(err);
            }

            if(!isMatch){
                return done(null, false, {error: 'Login failed. Please try again.'});
            }

            return done(null, user);

        });

    });

routes.js

var AuthenticationController = require('./controllers/authentication'),  
    TodoController = require('./controllers/todos'),  
    express = require('express'),
    passportService = require('../config/passport'),
    passport = require('passport');

var requireAuth = passport.authenticate('jwt', {session: false}),
    requireLogin = passport.authenticate('local', {session: false});

module.exports = function(app){

    var authRoutes = express.Router(),
        todoRoutes = express.Router();

    // Auth Routes
    app.use('/api/auth', authRoutes);

    authRoutes.post('/register', function(req, res){    //working fine
    AuthenticationController.register(req,res)});

    authRoutes.post('/login', requireLogin, function(req, res){    //not working. requireLogin
   AuthenticationController.login(req,res)});

    authRoutes.get('/protected', requireAuth, function(req, res){
        res.send({ content: 'Success'});
    });
authhwang commented 7 years ago

Do u set the middleware called ‘initialize’ from passport?

jainAdijain commented 7 years ago

yes

On Jun 15, 2017 13:28, "authhwang" notifications@github.com wrote:

Do u set the middleware called ‘initialize’ from passport?

— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub https://github.com/jaredhanson/passport-local/issues/154#issuecomment-308658182, or mute the thread https://github.com/notifications/unsubscribe-auth/AacC2tqgakskMDanfOu4vP28BBSYC1oNks5sEOQmgaJpZM4Ndi5C .

DushyantSurya commented 6 years ago

Use the below code as your session setup code //================== passport.serializeUser(function(user, done) { done(null, user.id); });

passport.deserializeUser(function(id, done) { User.findById(id, function(err, user) { done(err, user); }); });

AneriFumtiwala commented 4 years ago

@jainAdijain , Have you found the solution? I am facing the same issue.