如何解决PassportJs身份验证允许同时访客和登录用户执行操作
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);
};
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。