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);
};

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...