done 不是 passport js 中的函数错误
done is not a function error in passport js
我正在使用 passportjs 进行身份验证和会话。我从 mysql 获取用户名,从客户端获取输入字段,但是当在验证时调用 done
时,我得到 done is not a function
.
server.js :
var express = require('express');
var app = express();
var path = require('path');
var bodyParser = require('body-parser');
var passport = require('passport');
var LocalStrategy = require('passport-local').Strategy;
var cookieParser = require('cookie-parser');
// app.use(app.router);
app.use(passport.initialize());
app.use(passport.session());
app.use(bodyParser.json());
app.use(express.static(__dirname+"/staticFolder"));
var mysql = require('mysql');
var connection = mysql.createConnection({
host:'127.0.0.1',
user:'root',
password:'sdf',
database:'abc'
});
connection.connect(function(err){
if(err){
throw err;
}
});
passport.serializeUser(function(user,done){
console.log("serializeUser" + user);
done(null,user.body.username);
})
passport.deserializeUser(function(id, done) {
done(null, user);
});
passport.use(new LocalStrategy({
passReqToCallback : true
},function(username, password, done) {
connection.query("select * from employeedetails where empid = "+username.body.username,function(err,user,w){
if(err)
{
console.log(err+"fml $$$$$$$$$$");
return done(err);
}
if(username.body.password == user[0].password){
console.log(user[0].empid+" login");
return done(null,user[0].empid);
}
else{
return done(null,false,{message: 'Incorrect password'});
console.log(user[0].empid+" fml");
}
});
}));
app.get('/',function(request,response){
response.sendFile(__dirname+"/staticFolder/view/");
})
app.post('/saveEmployeeDetails',function(request,response){
response.end();
})
app.get('/login',function(request,response){ //the file sent when /login is requested
response.sendFile(__dirname+"/staticFolder/view/login.html");
})
app.post('/loginCheck',passport.authenticate('local', {
successRedirect : '/',
failureRedirect : '/login',
failureFlash : true //
}),
function(req, res) {
console.log("hello");
res.send("valid");
res.redirect('/');
});
能否请您参考下面的link,其中谈到了同样的错误
https://github.com/jaredhanson/passport/issues/421
它说当您删除 (passReqToCallBack: true) 选项时不会发生错误
在您的 passport.js 配置文件中,passport.use(new LocalStrategy) 回调
功能取决于您使用的策略,您将需要一定数量的 arguments.I 只需添加 "req"
作为我的第一个参数。
passport.use(new LocalStrategy({
passReqToCallback: true
},
function (req, apikey, done) {
//ADD REQ UP HERE
process.nextTick(function () {
findByApiKey(apikey, function (err, user) {
if (err) {
return done(err);
}
if (!user) {
return done(null, false, {
message: 'Unknown apikey : ' + apikey
});
}
return done(null, user);
})
});
}));
可能是函数中缺少参数的问题。
这是 passport-openidconnect
策略的示例源代码:
// Using 'passport-openidconnect' strategy
var OpenidConnectStrategy = require('passport-openidconnect');
var strategy = new OpenidConnectStrategy(
{
issuer: process.env.OAUTH_ISSUER,
authorizationURL: process.env.OAUTH_AUTHORIZATION_URL,
tokenURL: process.env.OAUTH_TOKEN_URL,
userInfoURL: process.env.OAUTH_USERINFO_URL,
clientID: process.env.OAUTH_CLIENT_ID,
clientSecret: process.env.OAUTH_CLIENT_SECRET,
callbackURL: process.env.OAUTH_CALLBACK_URL,
},
// Parameters in the function should be appropriate with the strategy
function (issuer, sub, profile, accessToken, refreshToken, done) {
return done(null, profile);
}
);
我正在使用 passportjs 进行身份验证和会话。我从 mysql 获取用户名,从客户端获取输入字段,但是当在验证时调用 done
时,我得到 done is not a function
.
server.js :
var express = require('express');
var app = express();
var path = require('path');
var bodyParser = require('body-parser');
var passport = require('passport');
var LocalStrategy = require('passport-local').Strategy;
var cookieParser = require('cookie-parser');
// app.use(app.router);
app.use(passport.initialize());
app.use(passport.session());
app.use(bodyParser.json());
app.use(express.static(__dirname+"/staticFolder"));
var mysql = require('mysql');
var connection = mysql.createConnection({
host:'127.0.0.1',
user:'root',
password:'sdf',
database:'abc'
});
connection.connect(function(err){
if(err){
throw err;
}
});
passport.serializeUser(function(user,done){
console.log("serializeUser" + user);
done(null,user.body.username);
})
passport.deserializeUser(function(id, done) {
done(null, user);
});
passport.use(new LocalStrategy({
passReqToCallback : true
},function(username, password, done) {
connection.query("select * from employeedetails where empid = "+username.body.username,function(err,user,w){
if(err)
{
console.log(err+"fml $$$$$$$$$$");
return done(err);
}
if(username.body.password == user[0].password){
console.log(user[0].empid+" login");
return done(null,user[0].empid);
}
else{
return done(null,false,{message: 'Incorrect password'});
console.log(user[0].empid+" fml");
}
});
}));
app.get('/',function(request,response){
response.sendFile(__dirname+"/staticFolder/view/");
})
app.post('/saveEmployeeDetails',function(request,response){
response.end();
})
app.get('/login',function(request,response){ //the file sent when /login is requested
response.sendFile(__dirname+"/staticFolder/view/login.html");
})
app.post('/loginCheck',passport.authenticate('local', {
successRedirect : '/',
failureRedirect : '/login',
failureFlash : true //
}),
function(req, res) {
console.log("hello");
res.send("valid");
res.redirect('/');
});
能否请您参考下面的link,其中谈到了同样的错误
https://github.com/jaredhanson/passport/issues/421
它说当您删除 (passReqToCallBack: true) 选项时不会发生错误
在您的 passport.js 配置文件中,passport.use(new LocalStrategy) 回调 功能取决于您使用的策略,您将需要一定数量的 arguments.I 只需添加 "req" 作为我的第一个参数。
passport.use(new LocalStrategy({
passReqToCallback: true
},
function (req, apikey, done) {
//ADD REQ UP HERE
process.nextTick(function () {
findByApiKey(apikey, function (err, user) {
if (err) {
return done(err);
}
if (!user) {
return done(null, false, {
message: 'Unknown apikey : ' + apikey
});
}
return done(null, user);
})
});
}));
可能是函数中缺少参数的问题。
这是 passport-openidconnect
策略的示例源代码:
// Using 'passport-openidconnect' strategy
var OpenidConnectStrategy = require('passport-openidconnect');
var strategy = new OpenidConnectStrategy(
{
issuer: process.env.OAUTH_ISSUER,
authorizationURL: process.env.OAUTH_AUTHORIZATION_URL,
tokenURL: process.env.OAUTH_TOKEN_URL,
userInfoURL: process.env.OAUTH_USERINFO_URL,
clientID: process.env.OAUTH_CLIENT_ID,
clientSecret: process.env.OAUTH_CLIENT_SECRET,
callbackURL: process.env.OAUTH_CALLBACK_URL,
},
// Parameters in the function should be appropriate with the strategy
function (issuer, sub, profile, accessToken, refreshToken, done) {
return done(null, profile);
}
);