के लिए एक्सप्रेस 4.10 के लिए उपयोग में नहीं है मिडलवेयर कोई भी कृपया मुझे इसके साथ मदद कर सकता है। जब मैं डेटाबेस में मौजूद किसी उपयोगकर्ता से कनेक्ट करने का प्रयास करता हूं तो मुझे Error: passport.initialize() middleware not in use
मिल रहा है। अपवाद मामले ठीक काम करते हैं (e.i गलत पासवर्ड/उपयोगकर्ता नाम नहीं मिला)।passport.initialize() कस्टम कॉलबैक
यहाँ सेटअप है:
संस्करणों मैं
// version
node --version v0.10.33
[email protected]
[email protected]
[email protected]
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;
है
आपको बहुत बहुत धन्यवाद :) – abarik