在处理来自 Facebook 的回调时获取与 FB 帐户关联的电子邮件

Get email associated with FB account while handling callback from Facebook

考虑以下场景:

根据 this 教程,在登录时处理来自 Facebook 的回调应该如下所示(并且工作得很好):

@RequestMapping("/auth/facebook/callback")
public RedirectView callBack(@RequestParam("code") String code,
                             @RequestParam("state") String state,
                             HttpSession session) {
  String stateFromSession = (String) session.getAttribute(STATE);
  session.removeAttribute(STATE);
  if (!state.equals(stateFromSession)) {
    return new RedirectView("/login");
  }

  AccessGrant accessGrant = getAccessGrant(code);

  String facebookUserId = getFacebookUserId(accessGrant);
  session.setAttribute("facebookUserId", facebookUserId);
  return new RedirectView("/logged-in");
}

问题 问题是,我如何通过 Facebook 用户 ID 确定我的数据库中已经有一个用户拥有这样的电子邮件,因为我只知道 FB 用户 ID 而我不知道他的身份验证令牌来使用 FB 检索电子邮件图形?

目标 我希望我的问题很清楚。我试图实现的是将他通过使用电子邮件和密码注册创建的用户帐户与他的 FB 帐户相关联,为他提供一个额外的选项来登录我的应用程序。

哦,我自己找到答案了。 AccessGrant 有一个方法 returns accessToken

accessGrant.getAccessToken()

现在我可以使用 FB 用户 ID 和访问令牌调用 FB 图来获取电子邮件(假设该用户授予我获取他的电子邮件的权限)。