javascript - Passport.js 可选身份验证

标签 javascript node.js authentication oauth-2.0 passport.js

是否有来自 Passport.js 的可选身份验证中间件?

假设我有一条路线,/api/users。我只想向公众提供一个用户列表,但对于经过身份验证的人,我想添加更多字段。

目前我只有一个愚蠢的自定义方法可以做同样的事情,但我想知道:

  • Passport.js 已经提供了这样的东西或者
  • 我怎样才能使它成为 Passport 的一部分,就像一个插件一样。

我的方法大致是这样的

function optionalAuth(req, res, next) {

    var authHeader = req.headers.authorization;
    var token = parseToken(authHeader); // just getting the OAuth token here
    if(!token) {

        return next();
    }
    User.findOne({
        token: token
    }, function(err, user) {

        if(err) {
            return res.json(401, {message: 'auth expired'});
        };
        if(user) {
            req.user = user;
        }
        next();
    });
}

然而,这对我来说似乎很愚蠢,而且在 passport-auth-strategies.js 或我认为应该存在的其他身份验证层中也不行。有什么更好的方法?

如果我找到一个 token 但它是无效的,告诉我是否做正确的事情返回 401 的奖励积分 :)

最佳答案

现在可能会迟到,但有一个 anonymous Passport 策略可以完全实现这一点。这样,公共(public)路由可以进行身份​​验证或不进行身份验证,但是当他们这样做时,您仍然会拥有与经过身份验证的用户关联的所有信息。在这里查看:https://github.com/jaredhanson/passport-anonymous

关于javascript - Passport.js 可选身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25806339/

相关文章:

api - 什么是 OAuth,它如何保护 REST API 调用?

forms - Laravel 从 sqlite DB 登录,获取 "PDOException could not find driver"

javascript - Vue 3 : dynamic component 中SSR和keep-alive问题

javascript如何将数组中的每个元素传递给不同的var

performance - NodeJs 性能问题

node.js - 如果 Windows PowerShell 的颜色在运行程序后损坏,如何重置它们?

javascript - 从左边开始将 <span> 分成下一行(rtl 语言)

javascript - wordpress 页面底部的 d3.js 图表渲染

javascript - 从用户查询中提取区域名称

c# - 具有多个存储库的 ServiceStack 身份验证