简体   繁体   English

node.JS Express护照路由

[英]node.JS Express passport routing

I've created a simple project, with 3 pages: Home, Contact and About. 我创建了一个简单的项目,共有3页:“主页”,“联系人”和“关于”。

Everything was working, then I wanted to add users registration with mongo. 一切正常,然后我想向mongo添加用户注册。

So I followed this tutorial 所以我按照本教程

But, when I add somes new routes, I can't acces any more pages. 但是,当我添加一些新路线时,无法再访问任何页面。

This was my index.js when I can acces my 3 pages 当我可以访问3页时,这就是我的index.js

var express = require('express');
var router = express.Router();

/* GET home page. */
router.get('/', function(req, res) {
  res.render('index', { title: 'Express' });
});



/* GET contact page. */
router.get('/contact', function(req, res) {
    res.render('contact');
});

/* POST contact page (submit). */
router.post('/contact', function(req, res) {
    res.render('contact', { name: req.param('name') });
});

/* GET home page. */
router.get('/home', function(req, res) {
    res.render('home');
});

/* POST home page (submit). */
router.post('/home', function(req, res) {
    res.render('home', { comm: req.param('comm') });
});


/* GET about page. */
router.get('/about', function(req, res) {
    res.render('about');
});


module.exports = router;

all simple and working. 一切简单而有效。 and now, it's like that : 现在,就像这样:

var express = require('express');
var router = express.Router();

/* GET home page. */
router.get('/', function(req, res) {
  res.render('index', { title: 'Express' });
});



/* GET contact page. */
router.get('/contact', function(req, res) {
    res.render('contact');
});

/* POST contact page (submit). */
router.post('/contact', function(req, res) {
    res.render('contact', { name: req.param('name') });
});

/* GET home page. */
router.get('/home', function(req, res) {
    res.render('home');
});

/* POST home page (submit). */
router.post('/home', function(req, res) {
    res.render('home', { comm: req.param('comm') });
});


/* GET about page. */
router.get('/about', function(req, res) {
    res.render('about');
});


module.exports = router;

module.exports = function(passport){

  // /* GET login page. */
  // router.get('/', function(req, res) {
  //   // Display the Login page with any flash message, if any
  //   res.render('index', { message: req.flash('message') });
  // });

  /* Handle Login POST */
  router.post('/login', passport.authenticate('login', {
    successRedirect: '/home',
    failureRedirect: '/',
    failureFlash : true
  }));

  /* GET Registration Page */
  router.get('/signup', function(req, res){
    res.render('register',{message: req.flash('message')});
  });

  /* Handle Registration POST */
  router.post('/signup', passport.authenticate('signup', {
    successRedirect: '/home',
    failureRedirect: '/signup',
    failureFlash : true
  }));

  return router;
}

and now, no routes are showed. 现在,没有显示路线。

Any ideas ? 有任何想法吗 ?

thanks ! 谢谢 !

EDIT : app.js 编辑: app.js

var express      = require('express');
var path         = require('path');
var favicon      = require('static-favicon');
var logger       = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser   = require('body-parser');
var swig         = require('swig');

var dbConfig = require('./db.js');
var mongoose = require('mongoose');
mongoose.connect(dbConfig.url);

var routes = require('./routes/index');

var app = express();

// Configuring Passport
var passport = require('passport');
var expressSession = require('express-session');
app.use(expressSession({secret: 'mySecretKey'}));
app.use(passport.initialize());
app.use(passport.session());


// view engine setup
app.engine('html', swig.renderFile);

app.set('view engine', 'html');
app.set('views', path.join(__dirname, 'views'));

// view cache
app.set('view cache', false);
swig.setDefaults({ cache: false });

app.use(favicon());
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded());
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));

app.use('/', routes);

/// catch 404 and forwarding to error handler
app.use(function(req, res, next) {
    var err = new Error('Not Found');
    err.status = 404;
    next(err);
});

/// error handlers

// development error handler
// will print stacktrace
if (app.get('env') === 'development') {
    app.use(function(err, req, res, next) {
        res.status(err.status || 500);
        res.render('error', {
            message: err.message,
            error: err
        });
    });
}

// production error handler
// no stacktraces leaked to user
app.use(function(err, req, res, next) {
    res.status(err.status || 500);
    res.render('error', {
        message: err.message,
        error: {}
    });
});


module.exports = app;

Your module expects a passport object 您的模块需要passport对象

module.exports = function(passport){

but you're not calling it with a passport object in app.js 但您没有在app.js中使用护照对象调用它

var routes = require('./routes/index');

also, you'll need to defined passport before calling the routes module. 另外,您需要在调用路由模块之前定义护照。 So in the end you'll need to modify your app.js to look something like this: 因此,最后您需要修改app.js使其看起来像这样:

var passport = require('passport');
var expressSession = require('express-session');
app.use(expressSession({secret: 'mySecretKey'}));
app.use(passport.initialize());
app.use(passport.session());

...
var routes = require('./routes/index')(passport);
...
app.use('/', routes);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM