node.js - 如何将 token 从中间件传递到路由

标签 node.js passport.js

这是我的 Passport 中间件。正如您所见,我正在对 Instagram 进行授权:

// Use the InstagramStrategy within Passport.
//   Strategies in Passport require a `verify` function, which accept
//   credentials (in this case, an accessToken, refreshToken, and Instagram
//   profile), and invoke a callback with a user object.
passport.use(new InstagramStrategy({

    clientID: INSTAGRAM_CLIENT_ID,
    clientSecret: INSTAGRAM_CLIENT_SECRET,
    callbackURL: INSTAGRAM_CALLBACK_URL
  },

  function(accessToken, refreshToken, profile, done) {

    // asynchronous verification, for effect...
    process.nextTick(function () {

      var oauth = {'accessToken' : accessToken,
                 'refreshToken' : refreshToken,
                      'profile' : profile
                  };


      return done(null, oauth);
    });
  }
));

然后是我的回调路线:

  app.get('/auth/instagram/callback', 
    passport.authenticate('instagram', { failureRedirect: '/home/language' }),
    function(req, res) {

      var oauth = req.get({oauth : oauth}); // Tried this first
      var oauth = req.oauth; // And this second
  });

我只是在此回调中从 req 获取变量 oauth 时遇到问题,因此我可以获取访问 token 并将其设置在 req.sessions在这里。

*当然,我没有同时使用这两个 var oauth = ... 语句。为了简洁起见,将它们放在一起显示。

最佳答案

所以我在 Google Group thread 中看到了这个功能然后the docs :

passReqToCallback: true

因为现在我想做的就是将 token 保存到 session 中,所以我可以这样做:

  passport.use(new InstagramStrategy({

    clientID: INSTAGRAM_CLIENT_ID,
    clientSecret: INSTAGRAM_CLIENT_SECRET,
    callbackURL: INSTAGRAM_CALLBACK_URL,
    passReqToCallback: true // ADD THIS!
  },

  function(req, accessToken, refreshToken, profile, done) { // `req` is first parameter

      req.session.IGAccessToken = accessToken; // Set tokens on session
      req.session.IGRefreshToken = refreshToken;

      return done(null, profile);
  }
));

现在我可以通过任何路线访问 token 。

关于node.js - 如何将 token 从中间件传递到路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25234338/

相关文章:

javascript - Node.js pm2 延迟脚本启动

javascript - 为什么 res.redirect 实际上没有重定向我?

node.js - 在服务器端使用 cors 从 axios 响应中获取 Cookie

node.js - Express:单独的路由和 Controller 文件

javascript - `validate` 在未指定的元素上可能会失败吗?

javascript - GraphQL 和 Sequelize 不返回插入的对象

node.js - 如何在node.js Passport 中通过twitter登录后使用访问 token 对用户进行身份验证

reactjs - React WebApp 调用 NestJS 后端中使用 PassportStrategy 的 Google 登录无法正常工作

javascript - Passport.js 执行

javascript - 如何将 Mongoose/Mongodb 与 node.js- Passport 身份验证一起使用