passport的LocalStrategy一直没起作用,求解答
我在以下代码第二行添加了输出信息,但是发现程序没有进来,求解答 segmentfault
##贴上相关代码 app.js
var session = require('express-session');
var bcrypt = require('bcrypt-nodejs');
var path = require('path');
var favicon = require('serve-favicon');
var logger = require('morgan');
//登陆模块涉及包
var passport = require('passport');
var LocalStrategy = require('passport-local').Strategy;
var routes = require('./routes/index');
var users = require('./routes/users');
var model = require('./database/model');
var app = express();
//登陆模块
passport.use(new LocalStrategy(function(userEmail, userPassword, done){
console.log(userEmail, userPassword);
new model.User({userEmail: userEmail}).fetch().then(function(data){
var user = data;
console.log(data);
if(user === null){
return done(null, false, {message: '此账号不存在'});
} else {
user = data.toJSON();
if(!bcrypt.compareSync(userEmail, user.userPassword)) {
return done(null, false, {message: '账号密码错误'});
} else {
return done(null, user);
}
}
});
}));
passport.serializeUser(function(user, done){
done(null, user.userEmail);
});
passport.deserializeUser(function(username, done) {
new model.User({userEmail: user.userEmail}).fetch().then(function(user) {
done(null, user);
});
});
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(session({secret: 'keyboard'}));
app.use(express.static(path.join(__dirname, 'public')));
路由部分index.js
var express = require('express');
var router = express.Router();
var passport = require('passport');
var bcrypt = require('bcrypt-nodejs');
var model = require('../database/model');
router.post('/login', function(req, res, next){
console.log(req.body);
passport.authenticate('local', {
successRedirect: '/',
failureRedirect: '/login'
}, function(err, user, info){
console.log(err, user, info);
if(err) {
return res.render('login', {title: '登录', errorMessage: err.message});
}
if(!user) {
return res.render('login', {title: '登陆', errorMessage: info.message});
}
return req.logIn(user, function(err){
if(err) {
return res.render('login', {title: '登陆', errorMessage: err.message});
} else {
return res.redirect('/project');
}
});
})(req, res, next);
});
package.json
{
"name": "app9d",
"version": "0.0.0",
"private": true,
"scripts": {
"start": "node ./bin/www"
},
"dependencies": {
"express": "4.x",
"body-parser": "*",
"bookshelf": "0.5",
"cookie-parser": "*",
"debug": "~2.2.0",
"jade": "~1.11.0",
"morgan": "~1.6.1",
"serve-favicon": "~2.3.0",
"passport": "*",
"passport-local": "*",
"bcrypt-nodejs": "*",
"express-session": "*",
"mysql": "*"
}
}
2 回复
自顶!!!!
我用的是Koa2框架,也出现这个问题。。。 原来使用的是 const passport = require(‘passport’) 后来使用插件koa-passport解决了这个问题: const passport = require(‘koa-passport’) 可以参考github: