Javascript 护照持有人或已认证

Javascript 护照持有人或已认证,javascript,node.js,authentication,express,passport.js,Javascript,Node.js,Authentication,Express,Passport.js,我一直在寻找,看看这是否是可能的一段时间,但没有找到任何东西 基本上,我用它来处理用户身份验证。当然,使用Node.js和Express来处理服务器端的事情。我还使用允许OAuth和处理API调用 对于API调用,我使用中间件controllerClient.isBearerAuthenticated,它运行passport.authenticate('bearer',{session:false})。然后,它将启动并运行passport内的函数。使用(“bearer”,新BearerStrat

我一直在寻找,看看这是否是可能的一段时间,但没有找到任何东西

基本上,我用它来处理用户身份验证。当然,使用Node.js和Express来处理服务器端的事情。我还使用允许OAuth和处理API调用

对于API调用,我使用中间件
controllerClient.isBearerAuthenticated
,它运行
passport.authenticate('bearer',{session:false})
。然后,它将启动并运行
passport内的函数。使用(“bearer”,新BearerStrategy)
。基本上是检查令牌是否有效并调用回调函数

对于非API请求和普通网页,它运行以下中间件来检查身份验证

function isLoggedIn(req, res, next) {
    if (req.isAuthenticated()) {
        return next();
    }
    res.redirect('/');
}
这就是我的问题。如果存在承载令牌
req.isAuthenticated()
=true,我希望允许访问我的API调用。目前,我必须选择是使用
isLoggedIn
中间件还是
controllerClient.isBearerAuthenticated
中间件。我正试图找到一种方法把它们结合在一起,像是一个或语句之类的

我在考虑使用多个中间件函数,以便它调用
isLoggedIn
,然后调用
controllerClient.isBearerAuthenticated
。但问题似乎是回调函数会被调用,所以它们都会被调用。我也在研究是否有一种方法可以跳过下一个中间件函数,转到下一个,但我也找不到任何相关的方法

我认为最好的办法是找到一种跳过controllerClient.IsBeareAuthenticated的方法,如果
req.isAuthenticated()
=true。现在可能有更好的方法来做到这一点,如果是这样的话,我很乐意听到它

但是关于如何使用中间件检查用户是否通过
req.isAuthenticated()
进行身份验证,有什么建议吗?或者实现这一目标的最佳方式是什么

还有一个问题。我之前问过一个问题,我发现
passport.authenticate
是用来处理实际问题的 身份验证不是已通过身份验证的用户。 否则,我将只使用
passport.authenticate
和 护照战略。而且使用会有和我现在使用连接确保登录或
controllerClient.isBearerAuthenticated
相同的问题


非常感谢提前这么多

我找到了一个似乎有效的解决方案。为了将来的参考和有类似问题的人,我将在下面发布我的解决方案

基本上,使用以下代码实现一个中间件功能似乎是可行的

function isAuthenticated(req, res, next) {
    //Checking to see if user is authenticated on the web
    if (req.isAuthenticated()) {
        return next();
    }
    //If not checking to see if user is authenticated via Bearer and OAuth
    else {
        return controllerClient.isBearerAuthenticated.apply(this, arguments);
    }
}
所以我们只是检查
req.isAuthenticated
是否等于true。如果是,我们只是返回回调函数,API函数将被调用。如果没有,那么我们将检查
controllerClient.isBearerAuthenticated
,它将自动调用下一个函数,如果成功,它看起来会这样。如果没有,它将发送状态代码为401的
未经授权


很高兴能弄清楚如何准确地更改
未经授权的
消息,但希望以后能对此进行研究。

我找到了一个似乎有效的解决方案。为了将来的参考和有类似问题的人,我将在下面发布我的解决方案

基本上,使用以下代码实现一个中间件功能似乎是可行的

function isAuthenticated(req, res, next) {
    //Checking to see if user is authenticated on the web
    if (req.isAuthenticated()) {
        return next();
    }
    //If not checking to see if user is authenticated via Bearer and OAuth
    else {
        return controllerClient.isBearerAuthenticated.apply(this, arguments);
    }
}
所以我们只是检查
req.isAuthenticated
是否等于true。如果是,我们只是返回回调函数,API函数将被调用。如果没有,那么我们将检查
controllerClient.isBearerAuthenticated
,它将自动调用下一个函数,如果成功,它看起来会这样。如果没有,它将发送状态代码为401的
未经授权

想知道如何准确地更改
未经授权的
消息会很好,但希望以后会对此进行研究