首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在不覆盖用户请求对象的情况下使用具有多种策略的passport.js

在不覆盖用户请求对象的情况下使用具有多种策略的passport.js
EN

Stack Overflow用户
提问于 2014-10-19 17:50:00
回答 3查看 2.8K关注 0票数 2

我用的是passport.js本地策略。我还需要用户使用Facebook、Twitter和G+进行身份验证,但不是作为选择,而是让用户能够从这些服务中检索他们的内容。

正如所写的,每个auth策略都将一个用户对象写入请求对象。这会使我的根用户注销。对于这些额外的auth策略,是否有一种方法可以利用护照,而不覆盖用户对象呢?

下面是一个典型的例子:

代码语言:javascript
复制
var passport = require('passport')
  , TwitterStrategy = require('passport-twitter').Strategy;

passport.use(new TwitterStrategy({
    consumerKey: TWITTER_CONSUMER_KEY,
    consumerSecret: TWITTER_CONSUMER_SECRET,
    callbackURL: "http://www.example.com/auth/twitter/callback"
  },
  function(token, tokenSecret, profile, done) {
    User.findOrCreate(..., function(err, user) {
      if (err) { return done(err); }
      done(null, user); //trashes my existing user object
    });
  }
));
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-10-19 18:08:25

这样做的一种方法是使用回调而不是重定向。通常,您会调用req.login()来设置请求对象。您可以跳过这一步,对响应做任何您想做的事情。

代码语言:javascript
复制
app.get('/auth/twitter/callback', function (req, res, next) {
        passport.authenticate('twitter', function (err, user, info) {
            res.send({err: err, user: user, info: info}); //skip req.login()
        })(req, res, next)
    });
票数 5
EN

Stack Overflow用户

发布于 2015-05-13 20:05:38

这是在Passport文档中列出的。http://passportjs.org/guide/authorize/

票数 4
EN

Stack Overflow用户

发布于 2021-09-03 17:25:09

对于任何来此且接受的解决方案不起作用的人,我使用Passport的authorize,并将express-sessioncookiesameSite属性设置为'lax'

代码语言:javascript
复制
...
  app.use(
    expressSession({
      cookie: {
        sameSite: 'lax',
        httpOnly: true,
        maxAge: 7 * 24 * 60 * 60 * 1000
      },
...
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26453527

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档