如何使用访问令牌获取Facebook用户标识
我有一个Facebook桌面应用程序,并使用Graph API。 我能够获得访问令牌,但之后完成 - 我不知道如何获得用户的ID。
我的流程是这样的:
我将用户发送到https://graph.facebook.com/oauth/authorize并提供所有必需的扩展权限。
在我的重定向页面中,我从Facebook获取代码。
然后,我使用API密钥对graph.facebook.com/oauth/access_token执行HTTP请求,并在响应中获取访问令牌。
从那时起,我无法获得用户ID。
这个问题怎么解决?
如果您想使用Graph API获取当前用户ID,那么只需发送一个请求到:
https://graph.facebook.com/me?access_token=...
最简单的方法是
https://graph.facebook.com/me?fields=id&access_token="xxxxx"
那么你会得到只包含用户标识的json响应。
Facebook的访问令牌看起来也很相似“1249203702 | 2.h1MTNeLqcLqw __。86400.129394400-605430316 | -WE1iH_CV-afTgyhDPc”
如果通过使用|来提取中间部分 分裂你得到
2.h1MTNeLqcLqw __。86400.129394400-605430316
然后再分裂 -
最后一部分605430316是用户标识。
以下是从访问令牌中提取用户标识的C#代码:
public long ParseUserIdFromAccessToken(string accessToken)
{
Contract.Requires(!string.isNullOrEmpty(accessToken);
/*
* access_token:
* 1249203702|2.h1MTNeLqcLqw__.86400.129394400-605430316|-WE1iH_CV-afTgyhDPc
* |_______|
* |
* user id
*/
long userId = 0;
var accessTokenParts = accessToken.Split('|');
if (accessTokenParts.Length == 3)
{
var idPart = accessTokenParts[1];
if (!string.IsNullOrEmpty(idPart))
{
var index = idPart.LastIndexOf('-');
if (index >= 0)
{
string id = idPart.Substring(index + 1);
if (!string.IsNullOrEmpty(id))
{
return id;
}
}
}
}
return null;
}
警告:访问令牌的结构未记录,可能并不总是符合上述模式。 需要您自担风险使用它。
更新由于Facebook的变化。 从加密访问令牌获取用户标识的首选方法如下所示:
try
{
var fb = new FacebookClient(accessToken);
var result = (IDictionary<string, object>)fb.Get("/me?fields=id");
return (string)result["id"];
}
catch (FacebookOAuthException)
{
return null;
}
链接地址: http://www.djcxy.com/p/32629.html