gpt4 book ai didi

Node.js module.exports 护照经过路由验证

转载 作者:太空宇宙 更新时间:2023-11-03 21:54:59 25 4
gpt4 key购买 nike

我想将文件中的每组路由分开。我需要在大多数路由中使用 isAuthenticated 来限制访问。当我将所有路由放在同一个文件中时,它就可以工作。

当我在 auth.js 和 order.js 中使用 module.exports = isAuthenticated 时,我使用 var auth = require('auth.js'); 我会当我转到 http://localhost:3000/order 时收到“isAuthenticated 未定义”错误auth.js 中定义的路由按预期工作。

我正在使用 Express.js 中间件“Passport 本地策略”(遵循 tutsplus 的教程并从 here 下载 github 存储库)。

我的项目结构:

bin/www
models/auth/init.js
models/auth/user.js
models/auth/signup.js
models/auth/login.js
models/order.js
views/error.pug
views/index.pug
views/home.pug
views/layout.pug
views/order.pug
views/register.pug
routes/order.js
routes/auth.js
public/stylesheets/style.css
app.js
db.js

./routes/auth.js:

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


var isAuthenticated = function (req, res, next) {
// if user is authenticated in the session, call the next() to call the next request handler
// Passport adds this method to request object. A middleware is allowed to add properties to
// request and response objects
if (req.isAuthenticated())
return next();
// if the user is not authenticated then redirect him to the login page
res.redirect('/');
}

module.exports = isAuthenticated;

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
}));

/* GET Home Page */
router.get('/home', isAuthenticated, function(req, res){
res.render('home', { user: req.user });
});


/* Handle Logout */
router.get('/signout', function(req, res) {
req.logout();
res.redirect('/');
});

return router;
}

./routes/order.js:

var express = require('express');
var router = express.Router();
var order = require('../models/order');

var auth = require('./auth.js');



module.exports = function(passport){

router.get('/order', isAuthenticated, function(req, res){
res.render('order');

});

router.post('/order', isAuthenticated, function(req, res)
{
var testorder = new order({
orderid: '52363',
productname: 'it works',
quantity: 1337
});
testorder.save(function (err) {
if (err) {console.log(err.stack);}
console.log('saving done...');
});

res.render('order', { product: req.body.productname });
});

};

./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 pug = require('pug');

var dbConfig = require('./db');
var mongoose = require('mongoose');
// Connect to DB
mongoose.connect(dbConfig.url);

var app = express();

// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'pug');

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')));

// Configuring Passport
var passport = require('passport');
var expressSession = require('express-session');
// TODO - Why Do we need this key ?
app.use(expressSession({secret: 'mySecretKey'}));
app.use(passport.initialize());
app.use(passport.session());

// Using the flash middleware provided by connect-flash to store messages in session
// and displaying in templates
var flash = require('connect-flash');
app.use(flash());

// Initialize Passport
var initPassport = require('./models/auth/init.js');
initPassport(passport);

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

// 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
});
});
}

module.exports = app;

最佳答案

尝试 auth.isAuntheticated(),它应该这样工作。

关于Node.js module.exports 护照经过路由验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43458891/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com