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

时间:2017-12-29 14:56:00

标签: spring facebook spring-mvc facebook-graph-api spring-social

请考虑以下情况:

  • 我想支持在我的应用程序中验证用户的两种方法(使用电子邮件/密码和使用FB帐户)。
  • 使用电子邮件(test123@test.com)
  • 注册我的申请的用户
  • 后来他尝试使用他的FB帐户登录(顺便说一下,他使用的电子邮件地址与他用电子邮件/密码注册时相同)

根据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帐户相关联,为他提供登录我的应用程序的附加选项。

1 个答案:

答案 0 :(得分:1)

哦,我自己就找到了答案。 AccessGrant有一个返回accessToken

的方法
accessGrant.getAccessToken()

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