我正在尝试使用 token 创建一个过滤器,以限制 Node.js 0.10 上未登录用户的页面访问,我使用如下中间件:
app.all( "/product/*" , handler);
// won't match /product <-- Important
// will match /product/cool
// will match /product/foov
从此页面:Express.js Middleware Tutorial ,没有结果,除了登录页面之外,我的所有页面都是私有(private)的,我希望,如果未登录的用户尝试访问某个私有(private)页面,他会被重定向到登录页面。该 token 在登录时完美工作。这是我的代码:
我的组件树
server - routes - usuario.js server.js pages - privadas -inicio.html -mapa.html -menu.html - login.html
server.js
var app = express();
...
var requiereLogin = require('./server/routes/usuario');
app.all('/privadas/*', requiereLogin);
...
usuario.js
var express = require('express');
var router = express.Router();
...
router.use(function(req,res,next){
console.log("filter...");
var token = req.headers['auth-token'];
jwt.verify(token, process.env.SECRET, function(err, decoded){
if (err){
res.redirect('/login');
} else {
req.user_id = decoded.IDU;
next();
}
})
});
app.config
app.config(function($routeProvider){
$routeProvider
.when("/", {
templateUrl: "pages/login.html",
css: ["css/login.css"],
controller: "loginCtrl",
controllerAs: "vm"
})
.when("/privadas/mapa", {
templateUrl: "pages/privadas/mapa.html",
controller: "mapCtrl",
controllerAs: "vm"
})
.when("/privadas/inicio", {
templateUrl: "pages/privadas/inicio.html",
controller: "inicioCtrl",
controllerAs: "vm"
})
.otherwise({redirectTo:'/'});
});
有什么想法吗?谢谢!
最佳答案
我会建议passport.js。 它需要解释和演练,因此我添加了文档的链接和一些基本示例来帮助您入门。它将允许您存储用户信息并使用该信息来限制对给定路由的访问
你的routes.js
app.all('/privadas/*',AuthHelpers.loginRequired, requiereLogin);
function loginRequired(req, res, next) {
if (!req.session.passport || !req.session.passport.user)
return res.status(401).json({status: 'Please log in'});
return next();
}
你的passport.js
const passport = require('passport');
var models = require('../server/models/index');
passport.serializeUser((user, done) => {
var session={
user.user,
}
done(null, session);
});
passport.deserializeUser((user, done) => {
models.users.findOne({
where: {
user: user.user
}
}).then(function(user) {
done(null, user);
}).catch(function (err) {
done(err, null);
});
});
module.exports = passport;
在 App.js 中
const passport = require('./auth/local');
app.use(passport.passport.initialize());
app.use(passport.passport.session());
关于javascript - Node.js。如何限制未登录用户的页面访问?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45766838/