2013-07-30 2 views
0

Я пытаюсь добавить facebook login в свое приложение. В этом смысле я использую следующий фрагмент кода:FacebookAuthorizeFilter бесконечное перенаправление

[FacebookAuthorize] 
    public ActionResult About() 
    { 
     ViewBag.Message = "Your app description page."; 

     return View(); 
    } 

И я зарегистрировать фильтр FacebookAuthorizeFilter.

Когда я перейти к/Главная/О том, что я получаю бесконечный редирект

/Home/About?code=AQAPoxl1J-....... 

Я могу войти, используя Facebook, если я просто использовать OAuth, представленную в шаблоне проекта ASP.NET MVC4.

Что мне не хватает?

ответ

0

После нескольких часов провели отладку, отражающее, исходный код анализа я пришел к выводу, что FacebookAuthorizeAttribute и FacebookAuthorizeFilter могут только осмысленно использовать в приложении Facebook Canvas.

+0

Я столкнулся с той же проблемой. Вы помните, почему это было так? – eniac

0

Я углубился в код фильтра FacebookAuthorize. Причина, по которой фильтр не работает с приложениями, отличными от canvas, заключается в том, что внутри метода OnAuthorization фильтра метод полагается на подписанный_головом Facebook, присутствующий в requset POST, когда пользователь перенаправляется обратно в ваше приложение. Если signed_request никогда не присутствует фильтр будет продолжать перенаправлять:

... Код опущен ...

 if (signedRequest == null || String.IsNullOrEmpty(userId) || String.IsNullOrEmpty(accessToken)) 
     { 
      // Cannot obtain user information from signed_request, redirect to Facebook OAuth dialog. 
      string redirectUrl = GetRedirectUrl(request); 
      Uri loginUrl = client.GetLoginUrl(redirectUrl, _config.AppId, null); 
      filterContext.Result = CreateRedirectResult(loginUrl); 
     } 

... код опущен ..

Альтернативный подход может создать аналогичный фильтр, который проверяет существующий параметр строки запроса кода. После получения кода вы можете использовать приложение appId и appSecret вашего приложения для обмена кодом для токена доступа. После получения маркера доступа вы можете определить, какие разрешения предоставлены пользователем и обрабатывать соответствующим образом.

Смежные вопросы