【问题标题】:done is not a function error in passport js完成不是护照js中的功能错误
【发布时间】:2021-06-22 11:06:50
【问题描述】:

我正在使用 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('/');
    });

【问题讨论】:

    标签: node.js express passport.js


    【解决方案1】:

    您能否参考以下链接,其中谈到了同样的错误

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

    它说当您删除 (passReqToCallBack: true) 选项时不会发生错误

    【讨论】:

    • 那么如何传递请求对象呢?
    • 这是一个可选参数,您可以传递也可以传递。在您的情况下,如果您遇到错误,请尝试删除可选参数并查看它是否有效... passReqToCallback` 当truereq 是验证回调的第一个参数(默认值:false
    【解决方案2】:

    在您的 passport.js 配置文件中,passport.use(new LocalStrategy) 回调 函数取决于您使用的策略,您将需要一定数量的参数。我只需要添加“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);
            })
        });
    }));
    

    【讨论】:

      【解决方案3】:

      这将是函数中缺少参数的问题。
      这是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);
        }
      );
      

      【讨论】:

        猜你喜欢
        • 2013-09-20
        • 1970-01-01
        • 2020-11-08
        • 2016-08-01
        • 2021-08-10
        • 2018-01-20
        • 2016-11-28
        • 2021-05-20
        • 1970-01-01
        相关资源
        最近更新 更多