问题描述
expressJs和PassportJS是我的新手,试图实现一个API,该API返回用户的所有基本详细信息,即
{
isUserLogin: true or false,allowedActions: [],applicationUrl: [],pageComponents: [],settings: []
}
因此,我面临的问题是,如果我实现了passport.js,那么来宾用户会遭到未经授权的访问。下面是我的代码。
router.js
authRoutes.get('/init',passport.authenticate('bearer',{ session: true }),authController.init);
controller.js
exports.init = (req,res) => {
//here is my login to get params. Guest user not able to reach it.
res.status(200).send(params);
};
我认为这在路由器级别上必须是一个简单的设置,但无法为此获取适当的文档。我被坚持超过6天。任何可以引导我朝正确方向发展的建议都会有所帮助。
谢谢。
解决方法
这就是passport-anonymous
的目的。
安装为:npm install passport-anonymous
然后使用该策略
const AnonymousStrategy = require('passport-anonymous').Strategy;
passport.use(new AnonymousStrategy());
然后在您的路由上,传递认证策略数组而不是字符串:
authRoutes.get('/init',passport.authenticate(['bearer','anonymous'],{ session: true }),authController.init);
然后在控制器上,您可以通过检查req.user
对象来检查用户是否已登录。请记住,必须将anonymous
放在数组中的bearer
之后
exports.init = (req,res) => {
if (req.user) {
console.log("Logged in");
} else {
console.log("Guest");
}
res.status(200).send(params);
};