在文件中正确加载isAuthenticated

时间:2017-11-11 16:48:13

标签: javascript node.js passport.js

我正在尝试在我的快递应用中使用passportpassport-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,其中显示了最不可行的示例。

1 个答案:

答案 0 :(得分:0)

isLogged()函数中,this关键字引用function本身,因此this.passportConfigundefined。你应该做的只是使用:

const auth = passportConfig.isAuthenticated();

没有this关键字。