使用Passport.js提取用户名和照片

时间:2014-03-21 16:08:27

标签: node.js github github-api passport.js

我正在开发一个node.js应用程序,最近想出了如何通过GitHub进行身份验证。我想知道是否有办法提取用户的个人资料照片和名称,以便我可以在应用程序的其他位置显示它。我found this question,但看起来Facebook和Google使用不同的方法来获取这些东西。

有人能指出我正确的方向吗?

1 个答案:

答案 0 :(得分:1)

Passport模块开发人员通常会规范化用户配置文件对象,以便以这种方式在所有模块中以相同的方式提供某些标准字段:

  1. profile.id - 由提供商分配
  2. profile.username - 他们的'登录'
  3. profile.displayName - 用户的全名
  4. profile.profileUrl - 提供商网站上的用户个人资料页面
  5. profile.emails - 电子邮件地址数组,但通常只是一个地址
  6. 因此,您已拥有用户名和/或显示名称。一个下来!

    这些涵盖了一直需要的内容,但提供商可以返回其他信息。这自然取决于(a)提供商提供何种服务以及(b)所要求的范围。

    特定于提供商的信息不会丢失。它存储在标准化属性旁边的profile._json中......并且检查它将显示您还需要使用的其他内容。

    对于Github个人资料照片/图片,您将寻找gravatar_id属性来获取用户的照片网址。

    您可以使用passport-github中的样板示例来确认这一点,仅用于说明目的,您可以执行类似这样的操作,以查看Github回复给您的内容,以便您可以评估整个提供程序响应:

    passport.use(new GitHubStrategy({
        // authentication stuff here, per `passport-github` docs
      },
      function(accessToken, refreshToken, profile, done) {
          // skipping error handling &c for brevity...
          fs.writeFile("githubProfile.json", JSON.stringify(profile));
          return done(null, profile);
        });
      }
    ));
    

    如果正确,您可以从profile._json.gravatar获取用户照片网址,以便以您需要的方式使用(保存到数据库,插入个人资料页面等)。