简体   繁体   中英

node.js login with passport

I am implementing a basic login system with passport but I keep receiving this error when I login with the correct credentials:

Express 500 TypeError: Cannot read property 'passport' of undefined

However works fine when I login with wrong credentials by redirecting back to login page. Help?

app.js

 //dependencies
 var express = require('express');
var routes = require('./routes');
var http = require('http');
var path = require('path');
var mongoose = require('mongoose');
var passport = require('./auth');

var app = express();
server = require('http').createServer(app),
    io = require('socket.io').listen(server);
// all environments
app.use(passport.initialize());
app.use(passport.session());
....
app.use(app.router);
app.use(require('less-middleware')({src: path.join(__dirname, 'public')}));
 app.use(express.static(path.join(__dirname, 'public')));
 ......
 //routes

 app.get('/login', routes.login);
app.post('/login', passport.authenticate('local', {
failureRedirect: '/login',
successRedirect: '/user'
}));

 app.get('/user', routes.user);

index.js

    exports.login = function(req, res) {
        res.render('login', {title: 'Log in'});
    };

     exports.user = function(req, res) {
   if (req.session.passport.user === undefined) {
        res.redirect('/login');
    } else {

       res.render('user', {title: 'Welcome!',
            user: req.user
        })
    }
    };

auth.js

     var passport = require('passport'),
    LocalStrategy = require('passport-local').Strategy;

passport.use(new LocalStrategy(
    function(username, password, done) {
        if (username === 'admin' && password === 'lynda') {
            return done(null, {username: 'admin'});
        }

        return done(null, false);
    }
));

passport.serializeUser(function(user, done) {
    done(null, user.username);
});

passport.deserializeUser(function(username, done) {
    done(null, {username: username});
});

module.exports = passport;

You're missing the session declaration, so req.session is undefined

app.use( express.cookieParser() );
app.use(express.session({ secret: 'my secret', cookie: { maxAge : 1200000 } }));  

also, you seem to be mixing up the requires:

var passport = require('./auth');

I would change this to:

var auth = require('./auth');

to avoid confusion with the passport library

You don't have a session, so you can't do if (req.session.passport.user === undefined) ...

You probably didn't set the session after login

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM