【问题标题】:princiapal.getName() returns ID instead of name for facebookprincipal.getName() 返回 ID 而不是 facebook 的名称
【发布时间】:2017-10-13 13:36:09
【问题描述】:

我使用 spring-security-oauth 和几个用于单点登录的客户端应用程序实现了我的自定义身份验证服务器,我可以选择 facebook 和 google 登录。

当我有这个控制器时,现在在我的客户端应用程序上:

    @RequestMapping({ "/user", "/me" })
public Principal user(Principal principal) {
    return principal;
}

对于 google 它工作正常并返回名称,但对于 facebook 它返回一个唯一 ID。我尝试了很多方法,但我无法从这个主体对象中获取名称。有人可以帮忙吗?

这是我的快捷 facebook 配置:

accessTokenUri: https://graph.facebook.com/oauth/access_token
userAuthorizationUri: https://www.facebook.com/dialog/oauth
tokenName: oauth_token
authenticationScheme: query
clientAuthenticationScheme: form
userInfoUri: https://graph.facebook.com/me?fields=id,name,email

【问题讨论】:

    标签: java facebook-graph-api spring-boot single-sign-on spring-security-oauth2


    【解决方案1】:

    好的,我已经解决了:

        @RequestMapping(value = { "/user", "/me"}, method = RequestMethod.GET)
    public Map<String, String> user(Principal principal) {
        Map<String, Object> details = (Map<String, Object>) ((OAuth2Authentication) principal).getUserAuthentication().getDetails();
        Map<String, String> map = new LinkedHashMap<>();
        map.put("name", (String) details.get("name"));
        map.put("email", (String) details.get("email"));
        return map;
    }
    

    【讨论】:

      【解决方案2】:

      Facebook Graph API

      使用f_name 而不是name

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-12-03
        • 2017-08-14
        • 2019-08-08
        • 1970-01-01
        • 1970-01-01
        • 2021-06-08
        • 2021-05-07
        相关资源
        最近更新 更多