【问题标题】:Facebook C# SDK: An active access token must be used to query information about the current userFacebook C# SDK:必须使用活动访问令牌来查询有关当前用户的信息
【发布时间】:2015-09-22 06:18:15
【问题描述】:

我的代码如下:

FacebookClient client = new FacebookClient();

client.AppId = appId;
client.AppSecret = appSecret;

dynamic result = client.Get("oauth/access_token", new
{
    client_id = appId,
    client_secret = appSecret,
    grant_type = "client_credentials"
});
//client.AccessToken = "";

var accessToken = result.access_token;
client.AccessToken = accessToken;

dynamic parameters = new ExpandoObject();
parameters.client_id = appId;
parameters.redirect_uri = "https://www.facebook.com/connect/login_success.html";
parameters.response_type = "token";
parameters.display = "popup";
parameters.scope = "publish_actions";

var login = client.GetLoginUrl(parameters);

// AccessToken token;
// var accessToken = client.AccessToken;

dynamic result2 = client.Get("me");

但我收到错误消息:Facebook C# SDK:

必须使用活动访问令牌来查询有关 当前用户。

有人可以帮我解决这个问题吗?

谢谢!

【问题讨论】:

    标签: c# facebook


    【解决方案1】:

    您使用 APPLICATION 访问令牌来获取有关当前登录用户的信息 - 那是 not allowed。这里的关键词是currently logged in。因此,如果您使用 ID - 例如用户 ID - 1231231231 - 而不是 me - 这将起作用。或您的应用有权访问的任何其他 ID。

    基本上,app对当前用户一无所知,所以你不能使用me

    关于用户令牌。您仍然必须与用户进行某种交互,以让他批准您的应用程序请求的权限。此时您可以将parameters.redirect_uri url 传递给Facebook 登录页面,Facebook 将在用户登录并批准权限后使用用户令牌调用它。这是您可以用于me 查询的令牌。但它会过期。然而,应用程序令牌不会过期,但它有一定的限制。一个用例可能是您需要在用户授予您权限之后很久才请求有关用户的某些信息。然后你应该使用应用令牌,这完全是服务器端的(不需要与用户进行额外的交互)。

    【讨论】:

    • 我没有对你投反对票!这是一个应用程序,所以如果他们已经登录,我宁愿不要将他们重定向到任何地方。我这样做对吗?
    • @Lilz re: downvote - 那不是我问的。关于应用程序 - 我更新了答案。让我知道这是否有意义。
    猜你喜欢
    • 1970-01-01
    • 2012-10-19
    • 2013-04-07
    • 2015-02-26
    • 1970-01-01
    • 2012-11-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多