【问题标题】:Prevent automatic redirect and get redirect URL of PassportJs "authenticate" method防止自动重定向并获取 PassportJs "authenticate" 方法的重定向 URL
【发布时间】:2021-08-17 09:11:59
【问题描述】:

我正在尝试将Passport.js 策略封装在适配器中,例如FacebookProviderAdapterTwitchProviderAdapter 等等......为此,我需要“防止”自动重定向的护照的默认行为浏览器访问社交网络的 OAuth URL

只是为了提供更多上下文,我的抽象适配器是这样的:

interface SocialAuthProviderInterface {
  generateRedirectUrl(): string;
}

我没有使用会话,我能够使用 Passport.Js 的回调“版本”,但即使它仍然重定向,我也无法拦截重定向 URL 字符串。

我意识到 Passport 也与 Express.js 库紧密耦合并将所有内容设置在其代码中,文档对这些方面非常肤浅,如何防止 URL 重定向并从任何策略中获取纯重定向 URL ?

我当前的测试设置如下:

/login/google 是生成 oauth URL 到 google 的起始端点,这是我想要阻止的重定向,我想要纯 URL 字符串。

app.get('/login/google', (request, response) => {
  passport.authenticate('google', { scope: ['profile email'], session: false}, (err, user, info) => {
    console.log(err, user, info)
  })(request, response)
})

app.get('/google', (request, response) => {
  passport.authenticate('google', { session: false }, (err, user, info) => {
    console.log(err, user, info)
  })(request);
})

【问题讨论】:

    标签: node.js express passport.js


    【解决方案1】:

    如果有人遇到这个问题,我是这样解决的:

    对于 URL 重定向:

    由于passport js与Express JS库高度耦合,在passport/lib/middleware/authenticate.js:315中你可以看到它用Express js定义重定向函数的地方,关键部分是res.end(),我手动替换了一个函数来返回url的值

    authenticate.js
    

    my workaround
    

    它不漂亮,但它有效:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-29
      • 1970-01-01
      • 1970-01-01
      • 2014-12-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-23
      相关资源
      最近更新 更多