我正在学习 Passport 和 Passport 本地,使用这个版本:
"passport": "^0.4.0", "passport-local": "^1.0.0"
问题是,当尝试在获取表单数据后写入用户注册表时,收到此错误消息:
(node:9120) UnhandledPromiseRejectionWarning: TypeError: done is not a function at Strategy.passport.use.LocalStrategy [as _verify] (C:\codes\Gclimb\passport\localAuth.js:27:5)
这是我的 localAuth.js 的代码
const passport = require('passport')
const LocalStrategy = require('passport-local').Strategy
const User = require('../models/user')
passport.serializeUser((user, done) => {
done(null, user.id)
})
passport.deserializeUser(async(id, done) => {
const user = await User.findById(id)
done(null, user)
})
passport.use('local-signup', new LocalStrategy({
usernameField: 'username',
passwordField: 'password',
passReqToCallback: true
}, async (req, username, email, password, done) => {
const user = new User()
user.email = email
user.password = password
user.username = username
await user.save()
done(null, user) // <----- Line 27(error)
}))
最佳答案
您传递的参数少于您的预期
我暂时删除了该电子邮件,如果可行,我们将担心该电子邮件
const passport = require('passport')
const LocalStrategy = require('passport-local').Strategy
const User = require('../models/user')
passport.serializeUser((user, done) => {
done(null, user.id)
})
passport.deserializeUser(async(id, done) => {
const user = await User.findById(id)
done(null, user)
})
passport.use('local-signup', new LocalStrategy({
usernameField: 'username',
passwordField: 'password',
passReqToCallback: true
}, async (req, username, password, done) => {
const user = new User()
user.password = password
user.username = username
await user.save()
done(null, user) // <----- Line 27(error)
}))
关于node.js - Nodejs - Passport ,完成不是一个函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53898198/