0

这是使用护照js进行身份验证的代码片段,如下所示,

// Middleware
passport.use('local-login', new LocalStrategy({
    usernameField: 'email',
    passwordField: 'password',
    passReqToCallback: true
}, function(req, email, password, done){
    User.findOne({ email: email }, function(err, user) {
        if(err) return done(err)
        if(!user) {
            return done(null, false, req.flash('loginMessage', 'No user has been found'))
        }
        if(!user.comparePassword(password)) {
            return done(null, false, req.flash('loginMessage', 'Incorrect Username/Password'))
        }
        return done(null, user)
    })
}))

在上面的代码中,done 是在多个地方使用的回调函数,但是我想知道这个(done)回调函数在哪里定义,我看到的是它作为参数传递然后调用,所以我的基本问题我怎么知道这个回调会做什么或者它是在哪里定义的。它应该执行一些操作。那么它是在哪里定义的呢?

4

4 回答 4

1

我怎么知道这个回调会做什么

护照文件应该告诉你为了正确使用它需要知道的一切。

或者在哪里定义

源代码中的某处passport

于 2018-08-01T13:19:57.333 回答
1

您无需担心调用“完成”回调的位置。

这是“护照”使用的内部回调

这是您告诉“护照”“登录操作”结果的代码方式

用户是否经过验证?

  • 如果是这样,请使用 error=null 和用户数据调用回调
  • 如果没有,请使用错误调用回调
于 2018-08-01T13:20:51.330 回答
0

Passport 是一个基于连接的框架。当您定义这样的中间件done时,就是管道中的下一个函数。

例如,在快速路由中,我们可以使用这样的中间件。

app.use('/route', middleWare1, middleWare2,..., route)

现在中间件有点像这样定义

const middleWare1 = (req, res, next)=> {
    //do some work
    next()
}

如果 next 被调用,它将转到下一个中​​间件。done就是这样。它将传递req给管道中的下一个中间件。

并且节点有一个约定在回调中传递第error一个和data第二个参数。

于 2018-08-01T13:22:36.607 回答
-1

根据http://www.passportjs.org/docs/basic-digest/您调用“完成”功能为用户提供护照。如果你想知道函数是在哪里定义的,你可以阅读“use”方法的源代码

于 2018-08-29T13:25:53.360 回答