2016-08-19 23 views
2

我正在使用passportjs進行身份驗證和會話。我從mysql獲取ussername並從客戶端獲取輸入字段,但在驗證時調用done時,我得到done is not a function完成並不是護照js中的函數錯誤

的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('/'); 
    }); 

回答

3

可否請您參考下面的鏈接,談到了同樣的錯誤

https://github.com/jaredhanson/passport/issues/421

它說,當你刪除(passReqToCallBack:真)選項錯誤不會發生

+0

如何傳遞請求對象呢? – boo

+0

這是一個可選參數,您可能會或可能會傳遞它。在你的情況下,如果你得到錯誤,嘗試刪除可選參數,看看它是否工作... 當'true'時,passReqToCallback','req'是驗證回調的第一個參數(默認值:'false') – anujjain0801

相關問題