内容简介:翻译自:https://stackoverflow.com/questions/29600759/passport-initialize-middleware-not-in-use-for-express-4-10-for-custom-callback
任何人都可以帮我这个.当我尝试连接到数据库中的用户时,我不断收到错误:passport.initialize()中间件未使用.异常案例工作正常(e.i密码/用户名不正确).
这是设置:
我正在使用的版本
// version node --version v0.10.33 express@4.10.2 passport@0.2.1 passport-local@1.0.0
server.js代码在这里
// server.js
'use strict';
var express = require('express');
var bodyParser = require('body-parser');
var session = require('express-session');
var passport = require('passport');
var flash = require('connect-flash');
var cookieParser = require('cookie-parser');
//Our custom modules
var mysqlc = require('./modules/mysql_client');
// Our custom apps
var app = express();
//view engine setup
app.set('env', process.env.NODE_ENV);
console.log('Running as environment: ' + app.get('env'));
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');
app.use(favicon(path.join(__dirname,'./public/favicon.ico')));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use('/rootpath', express.static(path.join(__dirname,'./public')));
// use session/cookie for auth
app.use(cookieParser());
app.use(session({
secret: 'clinksecret', // TODO: STORE outside
saveUninitialized: true,
resave: true
}));
// use connect-flash for flash messages stored in session
app.use(flash());
var server = require('http').Server(app);
var io = require('socket.io')(server);
/**
* Connect to all servers 1st
* */
// mysqlc connection setup
var connPropMySqlC = {
connectionLimit : 10,
host : config.settings.auth.clink.host,
user : config.settings.auth.clink['user'],
password : config.settings.auth.clink['password'],
database : config.settings.auth.clink.database
};
var mydbc = new mysqlc.MySqlClient(connPropMySqlC);
mydbc.connect(function (err) {
if (err) {
console.error('server-mdbc-connect-ERROR:', err);
throw err;
}
});
//authentication with session after connection to mydbc
var passport = require('./modules/auth')({mydbc:mydbc, io:io, app:app, passport:passport});
app.use(passport.initialize());
app.use(passport.session());
/*
* routers
* */
var testapp = require('./testapp/app')({mydbc:mydbc, io:io});
app.use('/testapp', testapp);
auth.js(所有护照配置)
// auth.js
/**
* for user authentication using passport
*/
var LocalStrategy = require('passport-local').Strategy;
var bcrypt = require('bcrypt-nodejs');
//Variables local to module
var io;
var mydbc;
var app;
var passport;
function validPassword(val, hash, callback) {
return bcrypt.compare(val, hash, callback);
}
function exportModFunc(args) {
/**
* used to passing object across modules
* @param {object} args: args = {mydbc, io} // where mydbc mysqlc.MySqlClient object
* @return {object} passport
*/
mydbc = args.mydbc; // update variable
io = args.io; // update variable
app = args.app; // update variable
passport = args.passport; // update variable
// route middleware
passport.use('local-login', new LocalStrategy({
usernameField : 'formLogin_user',
passwordField : 'formLogin_password',
passReqToCallback : true // allows us to pass back the entire request to the callback
},
function(req, username, password, done) {
mydbc.getUser({'username':username}, function(err, user) {
console.log('test-local-login', username, password, done, err, user)
if (err)
return done(err);
// if no user is found, return the message
if (!user)
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
validPassword(password, user.password, function(err, res) {
if (err)
return done(err);
if (!res) {
return done(null, false, req.flash('loginMessage', 'Oops! Wrong password.')); // create the loginMessage and save it to session as flashdata
} else {
// all is well, return successful user
return done(null, user);
}
});
});
}));
passport.serializeUser(function(user, done) {
/**
* each session will serialize to userid
* http://passportjs.org/guide/configure/
* @param {object} user: same as object as returned by mydbc.getUser()
* @return {null} null
*/
done(null, user.userid);
});
passport.deserializeUser(function(userid, done) {
/**
* each session will deserialize to user
* http://passportjs.org/guide/configure/
* @param {int} userid: same as mydbc.getUser().userid
* @return {null} null
*/
mydbc.getUser({'userid':userid}, function(err, user) {
done(null, user);
});
});
// route post request
//// process the login form
app.post('/authLogin/', function(req, res, next) {
passport.authenticate('local-login', function(err, user, info) {
if (err) { return next(err); }
var errors = {};
var loginMsg = req.flash('loginMessage');
if (loginMsg.length !== 0 || (!user)) {
errors.loginMsg = loginMsg;
return res.json({
errors: errors
});
}
console.log('test-authLogin-local-login', err, user, info);
req.logIn(user, {failureFlash: true}, function(err) {
if (err) { return next(err); }
return res.redirect('/users/' + user.username);
});
})(req, res, next);
});
return passport;
};
module.exports = exportModFunc;
您应该在将护照添加到路由中间件之前初始化护照: http://passportjs.org/guide/configure/
app.use(passport.initialize());
app.use(passport.session());
//authentication with session after connection to mydbc
var passport = require('./modules/auth')({mydbc:mydbc, io:io, app:app, passport:passport});
您还在server.js中重新定义护照var,这是不必要的.
翻译自:https://stackoverflow.com/questions/29600759/passport-initialize-middleware-not-in-use-for-express-4-10-for-custom-callback
以上所述就是小编给大家介绍的《node.js – passport.initialize()中间件未用于快速4.10的自定义回调》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- [OC] 关于block回调、高阶函数“回调再调用”及项目实践
- 即使回调IsOneWay,WCF客户端也会因回调而死锁
- Java 回调机制解读
- 如何避免回调地狱
- 如何使用JPA回调?
- callback回调函数-python
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。