2014-09-27 3 views
0

, поэтому у меня есть проблема. У меня есть логин маршрут:Trouble modularizing passport.js с узлом

var express = require('express'); 
var router = express.Router(); 
var passport = require('passport'); 
var LocalStrategy = require('passport-local').Strategy; 
require('../config/passport')(passport, LocalStrategy); 


/* GET /login */ 
router.get('/', function(req, res) { 
    //you'll probably write some 
res.render('login', { title: 'Please Log In' }); 
}); 

router.post('/', function(req, res) { 
console.log('posting'); 
console.log(passport); 
passport.initialize(); 
passport.session(); 
passport.authenticate('local', { successRedirect: '/', 
           failureRedirect: '/login' 
           }); 
console.log('after'); 
}); 
module.exports = router; 

моего app.js:

var express = require('express'), 
    path = require('path'), 
    favicon = require('serve-favicon'), 
    logger = require('morgan'), 
    cookieParser = require('cookie-parser'), 
    bodyParser = require('body-parser'), 
    session = require('express-session'), 
    RedisStore = require('connect-redis')(session), 
    passport = require('passport'), 

    // LocalStrategy = require('passport-local').Strategy, 
    pool = require('./config/database'), 

    routes = require('./routes/index'), 
    api = require('./routes/api'), 
    login = require('./routes/login'), 

    app = express(); 

// view engine setup 
app.set('views', path.join(__dirname, 'views')); 
app.set('view engine', 'jade'); 

// uncomment after placing your favicon in /public 
//app.use(favicon(__dirname + '/public/favicon.ico')); 
app.use(logger('dev')); 
app.use(bodyParser.json()); 
app.use(bodyParser.urlencoded({ extended: false })); 
app.use(cookieParser()); 
app.use(express.static(path.join(__dirname, 'public'))); 
app.use(session(<<redis store info>>); 
app.use(passport.initialize()); 
app.use(passport.session()); 


app.use('/', routes); 
app.use('/api', api); 
app.use('/login', login); 
...etc 

и моего ./config/passport.js

var pool = require('./database'); 

module.exports = function(passport, LocalStrategy) { 


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

// used to deserialize the user 
passport.deserializeUser(function(id, done) { 
    mysql.query("select * from users where id = "+id,function(err,rows){  
     done(err, rows[0]); 
    }); 
}); 

passport.use(new LocalStrategy({ 
    usernameField : 'username', 
    passwordField : 'password', 
    passReqToCallback : true // allows us to pass back the entire request to the callback 
}, 
function(req, username, password, done) { // callback with user and password from our form 
    console.log('hi'); 
    pool.query("SELECT * FROM `users` WHERE `user` = '" + username + "'",function(err,rows){ 
     if (err) 
      return done(err); 
     if (!rows.length) { 
      return done(null, false, req.flash('loginMessage', 'No user found.')); // req.flash is the way to set flashdata using connect-flash 
     } 

     // if the user is found but the password is wrong 
     if (!(rows[0].password == password)) 
      return done(null, false, req.flash('loginMessage', 'Oops! Wrong password.')); // create the loginMessage and save it to session as flashdata 

     // all is well, return successful user 
     return done(null, rows[0]);   

    }); 

})); 

}; 

И я не могу понять, почему Паспортная конфигурация просто не обрабатывается вообще. Когда я звоню в паспорт. Аутентификация, похоже, ничего не делает.

+0

Здесь не так много вещей. Когда-либо читал [документацию] (http://passportjs.org/guide/authenticate/)? – vesse

ответ

2

Итак, было несколько вещей, которые я сделал, чтобы заставить это работать. Во-первых, я переместил следующее в паспорт. Js При наличии чего-либо внутри требуется() паспорт, связанный с моим маршрутом, был орехом. Я начал без этого беспорядка, но попытка переделать к этому была достигнута. Кроме того, моя функция десериализации неправильно использовала ссылку mysql вместо моего пула.

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

Я тогда просто создать паспорт как обычно в конфигурации, и сделал

module.exports = passport; 

Тогда просто сделал это в app.js:

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

тогда я изменил мой маршрутизатор, удалены по существу все это на постфункции, а также:

router.post('/', passport.authenticate('local', { successRedirect: '/', 
                failureRedirect: '/login' 
               })); 

Я узнал, что не могу просто назвать паспорт. Он предназначался для размещения в обработчике req.

Извините за безумный и двусмысленный вопрос. На всякий случай, если какая-нибудь бедная душа ищет это по линии, я подумал, что мне, по крайней мере, нужно иметь любезность, чтобы говорить об этом.

Смежные вопросы