«(190) Недопустимая подпись токена доступа OAuth» с FacebookWebContext HasPermission - PullRequest
2 голосов
/ 13 мая 2011

Я только что обновил старый Facebook SDK до нового Facebook C # SDK 5.0.25 (RTW). Я делаю простой вход на свой сайт с некоторыми расширенными разрешениями, такими как электронная почта, read_stream, publish_stream, offline_access.

Все работает нормально, пока я не проверю разрешение: if (fbWebContext.HasPermission ("email")) ... Когда я это делаю, я получаю: Facebook.FacebookOAuthException: (190) Неверная подпись токена доступа OAuth.

Вы сталкиваетесь с этой проблемой?
Ниже приведен код, который я использую:

JS:

    FB.login(function (response) {
        if (response.session) {
            if (response.perms) {
                // user is logged in and granted some permissions.
                // perms is a comma separated list of granted permissions
            } else {
                // user is logged in, but did not grant any permissions
            }
            window.location.reload();
        } else {
            // user is not logged in
        }
    }, { perms: 'email,read_stream,publish_stream,offline_access' });

C #:


        var fbWebContext = FacebookWebContext.Current;

        if (fbWebContext.IsAuthorized())
        {
            var permissions = new FacebookWebAuthorizer(fbWebContext).Permissions;
            if (fbWebContext.HasPermission("email")) ...

Что-то не так с этим подходом?
Спасибо

1 Ответ

0 голосов
/ 16 мая 2011

Я использую другой подход:

Я не объявляю новую переменную для FacebookWebContext.Я не проверяю, является ли IsAuthorized (для меня это вызвало некоторые проблемы внутри приложения).

Итак, на вашем месте я бы просто попробовал следующее, включая запрос на авторизацию, если пользователь этого не сделал.ранее дали разрешения.Надеюсь, это поможет.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Facebook.Web;

namespace FacebookCsharpDemo
{
    public partial class askPerm2 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

            if (FacebookWebContext.Current.HasPermission("email"))
            {
                //permissions given
                processEmail();
            }
            else
            {
                var auth = new CanvasAuthorizer { Permissions = new[] { "user_about_me", "email" } };

                if (auth.Authorize())
                {
                    processEmail();
                }
                else
                {
                    //show permissions error message - not really - facebook c# sdk will redirect the user to the cancelUrlPath defined in the web.config...
                    litEmail.Text = "You must authorize the Application, please try again";
                }

            }

        }

        private void processEmail()
        {
            var fb = new FacebookWebClient();
            dynamic me = fb.Get("me");

            litEmail.Text = me.email;
        }

    }
}

На странице .aspx просто вставьте литерал с именем litEmail.

...