嘿我正在使用Node.JS的基本身份验证来保护路由。我对Node.JS很陌生,并且不了解下一个函数在这种情况下的作用。我要做的是确保路线:/admin/
注意:这是一个用于学习目的的项目,因此登录部分不会太严重,也不会实时使用。
authentication.js
var basicAuth = require('basic-auth');
exports.BasicAuthentication = function(request, response, next) {
function unauthorized(response) {
response.set('WWW-Authenticate', 'Basic realm=Authorization Required');
return response.send(401);
};
var user = basicAuth(request);
if (!user || !user.name || !user.pass) {
return unauthorized(response);
};
if (user.name === 'name' && user.pass === 'pass') {
return next();
} else {
return unauthorized(response);
};
};
和我导入模块身份验证的app.js:
app.get('/admin/', authentication.BasicAuthentication, function(req, res){
console.log("hi u need to login");
});
所以我想要做的是在身份验证通过时进一步路由用户。
提前致谢!
答案 0 :(得分:2)
尝试:
app.get('/admin/', authentication.BasicAuthentication);
app.get('/admin/', function(req, res) {});
答案 1 :(得分:1)
此功能称为中间件:
var basicAuth = require('basic-auth');
exports.BasicAuthentication = function(request, response, next) {
function unauthorized(response) {
response.set('WWW-Authenticate', 'Basic realm=Authorization Required');
return response.send(401);
};
var user = basicAuth(request);
if (!user || !user.name || !user.pass) {
return unauthorized(response);
};
if (user.name === 'name' && user.pass === 'pass') {
return next();
} else {
return unauthorized(response);
};
};
中间件是一个可以为各种目的定义的函数:
一种简单的方法是在执行另一个操作之前运行的功能,一个通用目的是保护某些路由以进行未经授权的访问。
您可以保护私有路由,然后调用authentication.BasicAuthentication before function(req,res){}
一些例子:
app.get('/user-profile/', authentication.BasicAuthentication, function(req, res){
//private info
});
app.get('/foo/', function(req, res){
//public info
});