我正在尝试在我的快递应用中使用passport
和passport-local
:
在我的主应用程序中,我加载以下内容:
const session = require('express-session')
const passport = require('passport')
// configure passport
// require('./config/passport')(passport)
const auth = require('./routes/auth')
const index = require('./routes/index')
const app = express()
// view engine setup
app.set('views', path.join(__dirname, 'views'))
app.set('view engine', 'pug')
app.use(logger(process.env.LOG_ENV))
app.use(bodyParser.json())
app.use(bodyParser.urlencoded({
extended: false,
}))
app.use(express.static(path.join(__dirname, '/../public')))
app.use(cookieParser())
app.use(session({
secret: 'super-mega-hyper-secret',
resave: false,
saveUninitialized: true,
}))
app.use(passport.initialize())
app.use(passport.session())
我的passport.js
配置文件非常典型:
const passport = require('passport')
const LocalStrategy = require('passport-local').Strategy
const serviceAuth = require('../service/auth')
passport.serializeUser((user, done) => {
done(null, user.id)
})
passport.deserializeUser(async (id, done) => {
const user = await serviceAuth.findById(id)
done(null, user)
})
passport.use('local', new LocalStrategy({
usernameField: 'username',
}, async(username, password, done) => {
const user = await serviceAuth.signin(username, password)
done(null, user)
}))
在我的路线中,我想引导哪些路线需要验证:
const express = require('express')
const router = express.Router()
const utils = require('../util/utils')
router.get('/', utils.isLogged(), (req, res) => {
res.render('dashboard')
})
module.exports = router
在utils/utils.js
文件夹中,我有中间件可以引导,哪个用户经过身份验证。
const passportConfig = require('../config/passport')
function isLogged(req, res, next) {
const auth = this.passportConfig.isAuthenticated()
if (req.auth) {
next()
} else {
res.redirect('/')
}
}
module.exports = {
isLogged,
}
但是,在这里我收到以下错误:
const auth = this.passportConfig.isAuthenticated()
^
TypeError: Cannot read property 'isAuthenticated' of undefined
有关如何在我的utils/utils.js
文件夹中正确加载护照的任何建议吗?
感谢您的回复!
更新
请找到以下github repo,其中显示了最不可行的示例。
答案 0 :(得分:0)
在isLogged()
函数中,this
关键字引用function
本身,因此this.passportConfig
为undefined
。你应该做的只是使用:
const auth = passportConfig.isAuthenticated();
没有this
关键字。