Node.js expressjs简单身份验证-localhost重定向您的次数太多
我创建了一个函数来检查用户是否经过身份验证,如下所示:-Node.js expressjs简单身份验证-localhost重定向您的次数太多,node.js,express,Node.js,Express,我创建了一个函数来检查用户是否经过身份验证,如下所示:- app.use(compression({threshold:1})); app.use(logger('dev')); app.use(session({ secret:'node.js app', resave:false, saveUninitialized:true, cookie:{secure:true} })) app.use(bodyParser.json()); app.use(bodyParse
app.use(compression({threshold:1}));
app.use(logger('dev'));
app.use(session({
secret:'node.js app',
resave:false,
saveUninitialized:true,
cookie:{secure:true}
}))
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
function CheckAuth(req,res,next){
if(!req.session.authenticated){
res.redirect('/users/login');
return;
}
next();
}
并用作中间件
app.use(CheckAuth)代码>
但是多次运行的函数会重定向并停止页面加载。您需要为“/users/login”进行路由,否则您将被重定向回同一位置,并且CheckAuth会在一个无休止的循环中反复调用
您需要为“/users/login”进行路由,否则您将被重定向回同一位置,并且CheckAuth将在一个无休止的循环中反复调用
由于中间件也运行在/users/login
您应该将其添加到签入中间件函数中
function CheckAuth(req,res,next){
if(!req.session.authenticated && req.url != '/users/login'){
res.redirect('/users/login');
return;
}
next();
}
由于中间件也在/users/login
您应该将其添加到签入中间件函数中
function CheckAuth(req,res,next){
if(!req.session.authenticated && req.url != '/users/login'){
res.redirect('/users/login');
return;
}
next();
}
您对所有路由都使用了中间件,因此重定向将永远循环
因此,您需要明确指定需要保护的路由。代码可能是这样的:
//routes without auth guard
app.post('/users/login', login);
app.post('/users/register', register);
//routes guarded by auth
app.get('/api/xxx', CheckAuth, xxx);
app.post('/api/yyy', CheckAuth, yyy);
您对所有路由都使用了中间件,因此重定向将永远循环
因此,您需要明确指定需要保护的路由。代码可能是这样的:
//routes without auth guard
app.post('/users/login', login);
app.post('/users/register', register);
//routes guarded by auth
app.get('/api/xxx', CheckAuth, xxx);
app.post('/api/yyy', CheckAuth, yyy);
很高兴帮助你!很高兴帮助你!