bất kỳ ai cũng có thể giúp tôi với điều này. Tôi tiếp tục nhận được Error: passport.initialize() middleware not in use
khi tôi thử kết nối với người dùng có trong cơ sở dữ liệu. Các trường hợp ngoại lệ hoạt động tốt (không tìm thấy mật khẩu/tên người dùng không chính xác).passport.initialize() middleware không được sử dụng để thể hiện 4.10 cho gọi lại tùy chỉnh
Đây là thiết lập:
phiên bản tôi đang sử dụng
// version
node --version v0.10.33
[email protected]
[email protected]
[email protected]
đang server.js là ở đây
// 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 (tất cả các configs hộ chiếu)
// 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;
cảm ơn bạn rất nhiều :) – abarik