0
点赞
收藏
分享

微信扫一扫

facebook登陆授权 服务器接入记录

青乌 2022-01-17 阅读 111

官方文档:http://developers.facebook.com/docs/reference/api/

1:client 接入facebook的sdk后,登陆时app拉起facebook的授权页面,等用户授权登陆后,app通过sdk能拿到当前用户的facebook id和token,app把这个id和token发送给服务器,服务器再验证。这个过程跟微信登陆很类似,微信是拉起微信客户端获取wxcode

2:服务器收到client app 发来的id和token,然后去facebook的后台验证,api如下

https://graph.facebook.com/debug_token?access_token={App-token}&input_token={User-token}

User-token为用户的token,App-token为APP的token,值为 {Your AppId}|{Your AppSecret},| urlencode 后变成了 %7C 

#coding:utf-8
'''
create on 2017-05-31

@author: sandy
'''


import urllib.parse
url = "https://graph.facebook.com/debug_token?access_token={0}&input_token={1}"
app_token = "app_token"
usr_token = "%s|%s" % ("AppId","AppSecret")
url = url.format(app_token,usr_token)
print(urllib.parse.quote(url))
#print(urllib.parse.urlencode({"access_token":app_token,"input_token":usr_token}))

 urllib.parse.urlencode 参数要求是 dic

服务器去facebook后台验证成功后返回的结果如下:

{
"data": {
"app_id": 000000000000000,
"expires_at": 1352419328,
"is_valid": true,
"issued_at": 1347235328,
"scopes": [
"email",
"publish_actions"
],
"user_id": 100207059
}
}

服务器逻辑层面 先验证HTTP code==200,然后再验证返回的json中is_valid 是不是 true,最后对比 user_id 和 步骤1 client传来的fb_id 是不是一致

关于这个fb_id 进一步说明

客户端获取到的账号id 实际上不是用户的真正的facebook id,而是facebook账号在该应用下的openid,这个openid 只适用于当前的应用!!!类似微信的openid

账号id 是一个纯数字的字符串。

 如果是MySQL,可以用无符号的bigint表示

3:获取用户的信息

登陆成功后,如果需要用户的一些基本信息比如昵称、性别、好友等等,就需要继续请求facebook的相关接口

https://graph.facebook.com/{user-id}?access_token={token}

以上,token可以有两种形式:

1、用户账号token,形式为:{User-token}

2、APP token,形式为:{Your AppID}%7C{Your AppSecret}

前面这个接口等同于 /me?access_token={User-Token}, 默认只返回 id,name ,如果想要更多用户数据,就要以下面的方式查询了
/{user-id}?fields=id,name,gender,friends&access_token={User-Token},

或 /me?fields=id,name,gender,friends&access_token={User-Token}

举报

相关推荐

0 条评论