Аутентификация на вкладке Facebook

Можно ли аутентифицировать пользователя из приложения на вкладке?

Я пытаюсь создать приложение для вкладки Facebook ASP.NET MVC 3, которое должно иметь возможность публиковать сообщения на стене.

Моей первой догадкой было использование CanvasAuthorizeAttribute

[CanvasAuthorize(Permissions="publish_stream")]

но моя вкладка перенаправляется на страницу авторизации входа в Facebook, а затем обратно на страницу холста и не остается на фан-странице (вкладка).

Затем я удаляю CanvasAuthorize и пробовал следующее

public string Index()
{
    bool isAuthorized = FacebookWebContext.Current.IsAuthorized("publish_stream");

    return isAuthorized.ToString();
}

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

  • Предварительная авторизация приложения с разрешением stream_publish другими способами, а затем запуск страницы как приложения ( http://apps.facebook.com/myapp/mytab ) возвращает true при запуске страницы с вкладки фан-страницы ( http://www.facebook.com/myfanpage?sk=app_myappid ) возвращает ложь !

Почему вкладка не может прочитать разрешение, а страница холста может?


person Carlos Muñoz    schedule 05.05.2011    source источник


Ответы (1)


На своей странице Facebook вы можете определить, авторизовал ли пользователь ваше приложение или нет, изучив файл signed_request. Если переданы user_id и oauth_token, пользователь уже авторизовал ваше приложение. Если нет, вы можете сделать что-то подобное из своего действия контроллера:

    string[] extendedPermissions = new[] { "publish_stream", "manage_pages" };
    var oauth = new FacebookOAuthClient(FacebookWebContext.Current.Settings);
    var parameters = new Dictionary<string, object> {
                { "redirect_uri", "http://www.facebook.com/pages/{SomeFacebookPage}?sk=app_{appId}"}
            };

    parameters["scope"] = String.Join(",", extendedPermissions);
    var loginUrl = oauth.GetLoginUrl(parameters);

    return Redirect(loginUrl.AbsoluteUri);

После того, как ваш пользователь аутентифицирует ваше приложение, он будет отправлен на «redirect_uri», который может быть вкладкой вашего приложения на странице Facebook.

person Johnny Oshika    schedule 06.05.2011