将对象传递给路由器

时间:2017-05-06 11:08:35

标签: node.js express

我是Express.js的新手,但我想以正确的方式学习它。因此,我开始使用Peter Lyon建议的代码结构:https://github.com/focusaurus/express_code_structure。我正在关注一个passport.js教程,该教程要求我将护照对象传递给我的路由器并且我被困在那里

这是我的index.js:

appCommon.head(app, passport)

// Load all Routers
app.use('/', require('./pages/router'))
app.use('/projects', require('./projects/router'))
app.use('/', require('./authentication/router'))(passport) // Pass passport to router

我的身份验证/ router.js:

var express = require('express')
var join = require('path').join

var router = new express.Router()
// I removed the other functions
function processSignup (req, res) {
    passport.authenticate('local-signup', {
        successRedirect : '/profile', // redirect to the secure profile section
        failureRedirect : '/signup', // redirect back to the signup page if there is an error
        failureFlash : true // allow flash messages
    })
}
router.use(express.static(join(__dirname, '../../wwwroot')))
router.get('/login', login)
router.get('/signup', signup)
router.post('/signup', processSignup)
router.get('/profile', isLoggedIn, profile)
router.get('/logout', logout)

module.exports = router

问题:

  1. 我是否正确将护照对象传递给路由器?
  2. 如何将护照对象添加到路由器中以便processSignup功能知道它?

1 个答案:

答案 0 :(得分:0)

你真的不应该向路由器发送任何护照对象。您应该做的是使用主文件中的策略,如下所示:

// load passport strategies
const localStrategy             = require('./server/passport')
passport.use('local-signup',    localStrategy.Signup)
passport.use('local-login',     localStrategy.Login)

在护照中使用此策略后,您可以使用此策略立即在以下任何路线中进行身份验证:

const passport = require('passport');
router.post('/login',
  passport.authenticate('local-login', { successRedirect: '/',
                               failureRedirect: '/login',
                               failureFlash: true })
);