【问题标题】:move to passport.js from key,email,client从密钥、电子邮件、客户端移动到 passport.js
【发布时间】:2016-05-26 04:10:49
【问题描述】:

在我的应用程序中,有 3 种验证方式。谷歌、Facebook 和本地。我还没有使用护照。

用户授权后,他选择一个客户端(每个用户必须至少有一个客户端)。

那么每个 API 请求都包含 3 个查询字符串参数:emailkeyclient。目前我正在手动将req.userreq.client 添加到req object

我想改用护照,因为那样应用程序将很容易支持 twitter 和链接登录。

在我开始其他登录方法之前,我需要将当前应用迁移到护照。

我的应用当前未使用会话或 cookie。所有凭据数据,保存在浏览器 localStorage 中,并在每个请求中发送。我不想改变它。

问题是:如何使用emailkeyclient进行护照登录?如何使它添加req.client 而不仅仅是req.user

我真的不明白我的逻辑的投注选项在哪里,以及在哪里赋予护照权力。

我是否需要使用passport.serializeUser? 在路由中放入什么,在app.use 中放入什么??

【问题讨论】:

  • Express 在用户请求中找到 cookie 后设置 req.session.passport.userPassport.js 使用 req.session.passport.user 的内容,然后设置 req.user ,你要做的也是设置req.client 我敢打赌最好的地方是 deserializeUser 方法。详情请看我对这个问题的回答stackoverflow.com/questions/35359295/…
  • 你确定吗?我认为护照调用 deserializeUser 只是为了需要一个会话。所以它不会在用户第一次尝试登录时被调用。
  • 如果您将 passport.session() 附加到应用程序,那么它会将会话附加到每个请求,这意味着每个请求都会调用反序列化用户。如果您将您的 passport.session() 放在 express 静态配置之上,那么 deserializeUser 甚至会为每个静态内容(即图像、css、javascript 等)调用一次。在此处阅读我关于序列化和反序列化用户的答案stackoverflow.com/questions/34675655/…
  • 但是第一个请求在验证会话后创建而不是恢复。 deserialUser 仅在从会话中恢复用户时调用。在auhtenticate 成功后,我确定deserialaizerUser 函数不会运行。并且想知道我想要 req.client 而不是 session.client。这是无状态的应用程序

标签: node.js express passport.js


【解决方案1】:

我会推荐一种基于标准的方式来支持无 cookie 身份验证。签出:https://github.com/themikenicholson/passport-jwt

var JwtStrategy = require('passport-jwt').Strategy,
    ExtractJwt = require('passport-jwt').ExtractJwt;
var opts = {}
opts.jwtFromRequest = ExtractJwt.fromAuthHeader();
opts.secretOrKey = 'secret';
opts.issuer = "accounts.examplesoft.com";
opts.audience = "yoursite.net";
passport.use(new JwtStrategy(opts, function(jwt_payload, done) {
    User.findOne({id: jwt_payload.sub}, function(err, user) {
        if (err) {
            return done(err, false);
        }
        if (user) {
            done(null, user);
        } else {
            done(null, false);
            // or you could create a new account
        }
    });
}));

【讨论】:

  • 嗯,这是一个答案,只是可能不是你想听到的。
猜你喜欢
  • 1970-01-01
  • 2011-07-28
  • 2012-07-07
  • 1970-01-01
  • 1970-01-01
  • 2017-03-17
  • 2013-03-03
  • 2020-04-21
相关资源
最近更新 更多