如何配置 passport-github 以在回调时确认用户?

Posted

技术标签:

【中文标题】如何配置 passport-github 以在回调时确认用户?【英文标题】:How can I configure passport-github to acknowledge the user on callback? 【发布时间】:2015-06-24 23:33:50 【问题描述】:

我有一项服务,我的目标是让用户通过 OAuth 授权我们访问他/她的 Github 帐户。 API 层是无状态的,所以我不想维护任何会话信息。我到目前为止的代码是:

  app.use passport.initialize()
  app.use passport.session()

  passport.use new GitHubStrategy
    clientID: global.config.oauth.github.clientID
    clientSecret: global.config.oauth.github.clientSecret
    callbackURL: "http://localhost:9500/auth/github/callback"
    passReqToCallback: true
  , (req, accessToken, refreshToken, profile, done) ->
    console.log req.params
    serviceQuery =
      service: 'github'
      provider_id: "#profile.id"
      UserId: 13

    global.db.Service.find
      where: serviceQuery
    .then (dbService) ->
      if not dbService
        newService =
          service: 'github'
          token: accessToken
          secret: null
          provider_id: profile.id
          raw: profile._json
          UserId: 13
        global.db.Service.create newService
      else
        dbService.token = accessToken
        dbService.raw = profile._json
        dbService.save()
    .then ->
      done null, true


  app.get '/auth/github/:sessionToken', (req, res, next) ->
    console.log req.params
    next()
  , passport.authenticate 'github',
    scope: 'repo'
    session: false

  app.get '/auth/github/callback', passport.authenticate('github',
    scope: 'repo'
    session: false
  ), (req, res) ->
    res.redirect 'http://localhost:8080/app'

所以当用户被定向到/auth/github/:sessionToken 时,我希望passport 发挥它的魔力并将用户重定向到github。这很好用。但是当他们返回/auth/github/callback时,我仍然需要能够识别它是哪个用户。

由于这是 API 服务,它应该是无状态的,所以正如我之前提到的,我正在寻找某种方法将该令牌传递给 /auth/github/callback。我怎样才能做到这一点?

【问题讨论】:

【参考方案1】:

在 /auth/github/callback 中尝试 req.user 的控制台日志。我相信 req.user 仍然会存储他们的用户信息。正如this tutorial 中出现的那样,它们通过传入 req.user 来传递要显示的用户信息。

【讨论】:

This guide 实际上显示了如何显示来自 google 身份验证的信息。谷歌信息似乎显示在 user.google 变量中。也许尝试控制台记录 req.user.github 以获取他们的 github 信息。 但是如果我不设置会话它怎么存储呢?

以上是关于如何配置 passport-github 以在回调时确认用户?的主要内容,如果未能解决你的问题,请参考以下文章

创建人工回调函数以在 Jquery 中启用对 .addclass 和 .css 的回调?

Wordpress 音频播放器和 SmoothState。调用回调以在新页面上重新加载播放器?

传递参数以在Shiny中渲染函数

如何配置 NiFi InvokeHTTP 以在 Clickhouse 中发布插入

如何配置 Hibernate 以在 Karaf JPA 示例中工作?

如何检测 Kestrel 中的连接关闭