Facebook 授权登录(服务端)

Facebook 授权登录(服务端)

一、Facebook配置

1、注册开发者

facebook开发者官网注册成开发者

2、创建应用

点击右上角->我的应用->创建应用

3、获取应用编号、应用密钥

4、开通登录

  1. 点击左边产品->添加产品->登录
  2. 一般我们只需要名字、邮箱,权限部分不需要增加,如果有需要自行添加

5、记录应用编号、应用密钥后续开发使用

二、Facebook 授权登录时序图

Facebook 授权登录时序图

三、Facebook 授权登录相关官方文档

1、官方文档地址

https://developers.facebook.com/docs/graph-api

2、校验token地址
  1. 校验token地址的文档地址
  2. 接口地址
    https://graph.facebook.com/debug_token?access_token=ACCESS-TOKEN&input_token={User-token}
  3. 注意事项
    接口中的access_token和input_token 均是客户端传递的token值
3、获取用户信息地址
  1. 获取用户信息的文档地址
  2. 接口地址
    https://graph.facebook.com/USER-ID?fields=id,name,email,picture&access_token=ACCESS-TOKEN
  3. 注意事项
    接口中的access_token指的是前面配置中获取的应用编号和应用密钥组合,值为{Your AppId}|{Your AppSecret}, 记得请求路径做urlEncode
参考代码

校验token合法性

private static final String CHECK_TOKEN_URL = "https://graph.facebook.com/debug_token?access_token=%s&input_token=%s";
/**
     * 校验用户token释放非法
     * @param unionId  用户唯一标识
     * @param token  用户授权token
     */
private Integer checkTokenValid(String unionId, String token) {
        String checkTokenUrl = String.format(CHECK_TOKEN_URL, token, token);
        ResponseEntity<String> checkTokenResponse = restTemplate.getForEntity(checkTokenUrl, String.class);
        if (!checkTokenResponse.getStatusCode().is2xxSuccessful()) {
            log.error("facebook请求校验接口失败,响应为{}", checkTokenResponse.getStatusCode());
            return -1;
        }
        JsonNode checkTokenResponseNode = JsonUtil.fromJson(checkTokenResponse.getBody(), JsonNode.class);
        JsonNode data = checkTokenResponseNode.get("data");
        if (!unionId.equals(Optional.ofNullable(data).map(it -> it.get("user_id")).map(JsonNode::asText).orElse(""))) {
            log.error("用户传递的唯一标识非法,unionId is {},data is {}", unionId, checkTokenResponse.getBody());
            return -1;
        }
        if (!Optional.ofNullable(data).map(it -> it.get("is_valid")).map(JsonNode::asBoolean).orElse(Boolean.FALSE)) {
            log.error("用户传递的唯一标识过期,unionId is {},data is {}", unionId, checkTokenResponse.getBody());
            return -1;
        }
        return 1;
    }

获取用户信息

private static final String USER_INFO_URL = "https://graph.facebook.com/%s?access_token=%s&fields=id,name,picture,email";
private Map<String,String> getThirdPartyLoginUserBO(String unionId) {
        String getUserInfoUrl = String.format(USER_INFO_URL, unionId, getAccessToken());
        ResponseEntity<String> userInfoResponse = restTemplate.getForEntity(getUserInfoUrl, String.class);
        if (!userInfoResponse.getStatusCode().is2xxSuccessful()) {
            log.error("facebook请求查询用户接口失败,响应为{}", userInfoResponse.getStatusCode());
            return Collections.emptyMap();
        }
        JsonNode userInfoResponseNode = JsonUtil.fromJson(userInfoResponse.getBody(), JsonNode.class);
        Map<String,String> thirdPartyLoginUser =new HashMap<>(4);
        thirdPartyLoginUser.put("unionId",userInfoResponseNode.get("id").asText());
        thirdPartyLoginUser.put("userName",userInfoResponseNode.get("name").asText());
        //用户的email可能为空
        thirdPartyLoginUser.put("email",userInfoResponseNode.at("/email").asText());
        //用户的头像可能为空
        thirdPartyLoginUser.put("avatar",userInfoResponseNode.at("/picture/data/url").asText());
        return thirdPartyLoginUser;
    }
    private String getAccessToken() {
        //accessToken的组成为clientId|clientSecret,由于urlEncode |变为%7C
        return clientId + "%7C" + clientSecret;
    }
  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要使用Facebook SDK登录,您需要遵循以下步骤: 1. 创建Facebook开发人员帐户并设置应用程序。 2. 在您的应用程序中包含Facebook SDK。 3. 配置您的应用程序以使用Facebook登录。 4. 实现Facebook登录按钮并使用Facebook SDK进行身份验证。 下面是一些更详细的步骤: 1. 创建Facebook开发人员帐户并设置应用程序: - 访问Facebook for Developers网站并创建一个新的开发人员帐户。 - 在Dashboard中创建一个新应用程序,并设置应用程序的名称和基本设置。 - 在设置中添加您的平台(iOS、Android等)和相关详细信息。 2. 在您的应用程序中包含Facebook SDK: - 使用CocoaPods或手动方式将Facebook SDK添加到您的项目中。 - 设置Facebook SDK的配置文件,并在应用程序启动时初始化SDK。 3. 配置您的应用程序以使用Facebook登录: - 在开发人员门户中的设置中,将Facebook登录设置为“启用”。 - 配置您的应用程序的Bundle ID和OAuth回调URL。 4. 实现Facebook登录按钮并使用Facebook SDK进行身份验证: - 将Facebook登录按钮添加到您的应用程序中,并将其链接到Facebook SDK的登录方法。 - 处理登录成功或失败的回调,并在成功的情况下使用Facebook SDK返回的访问令牌进行身份验证。 这些是一些基本步骤,但要实现Facebook登录,您需要更详细的指南和文档。Facebook开发人员门户提供了详细的文档和示例代码,可帮助您完成此过程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值