如何使用访问令牌获取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

    上一篇: How to get the Facebook user id using the access token

    下一篇: How to get user posts using Graph API?