在处理来自 Facebook 的回调时获取与 FB 帐户关联的电子邮件
Get email associated with FB account while handling callback from Facebook
考虑以下场景:
- 我想在我的应用程序中支持两种方式来验证用户身份(使用 email/password 和使用 FB 帐户)。
- 用户使用电子邮件 (test123@test.com) 注册了我的应用程序
- 稍后他尝试使用他的 FB 帐户登录(顺便说一下,该帐户与他使用 email/pwd 注册时使用的电子邮件地址相同)
根据 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 图来获取电子邮件(假设该用户授予我获取他的电子邮件的权限)。
考虑以下场景:
- 我想在我的应用程序中支持两种方式来验证用户身份(使用 email/password 和使用 FB 帐户)。
- 用户使用电子邮件 (test123@test.com) 注册了我的应用程序
- 稍后他尝试使用他的 FB 帐户登录(顺便说一下,该帐户与他使用 email/pwd 注册时使用的电子邮件地址相同)
根据 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 图来获取电子邮件(假设该用户授予我获取他的电子邮件的权限)。