Аутентификация Facebook и странное поведение переадресации

В настоящее время я тестирую реализацию OAuth для facebook connect, используя http://facebooksdk.codeplex.com.

У меня есть FacebookController с двумя простыми действиями, называемыми LogOn и CallBack.

Все работает нормально, и пользователь правильно зарегистрирован в моей системе.

Проблема в том, что когда вызывается действие CallBack, происходит что-то странное, что делает простой

return Redirect(loggedUrl);

перенаправление на правильный зарегистрированный URL, но заканчивающийся следующими символами: #_=_

Похоже, что сервер Facebook отправляет информацию на мой веб-сервер, используя следующий HTTP-заголовок:

HTTP/1.1 302 Found
Cache-Control: private, no-cache, no-store, must-revalidate
Expires: Sat, 01 Jan 2000 00:00:00 GMT
Location: http://mywebsite.com/Facebook/CallBack/?state=1&code=AQCXexr10uxANSBOu9JqrBDxqPkWbsyxM1S9ltuY9XwCXW7eGsOII329SthClxOSM_a7wJvwrXh1_O3D5I7E_nxCDTWDLpyYdMpMUfw4zMWcQ4oV2PmRkIMd2NfPYRKlkLgkurEzka1CjAF1jp8Xb3crklOB59W4IT7LZy6MEmFusuhSKacmsTcV1LAOW4uJ3K4#_=_
P3P: CP="Facebook does not have a P3P policy. Learn why here: http://fb.me/p3p"
Pragma: no-cache
Set-Cookie: locale=en_US; expires=Fri, 28-Oct-2011 00:09:38 GMT; path=/; domain=.facebook.com
Content-Type: text/html; charset=utf-8
X-FB-Server: 10.43.103.61
X-Cnection: close
Date: Fri, 21 Oct 2011 00:09:38 GMT
Content-Length: 0

Как видите, мы можем найти #_=_ символа в конце значения Location.

Это похоже на то, что перенаправление учитывало #_=_ символов, автоматически добавляя их в loggedUrl.

Даже когда я пытаюсь использовать return Redirect("/");, #_=_ добавляется (почти) ниоткуда к моему перенаправленному URL...

Любая идея будет действительно оценена.

Заранее спасибо за любой ответ.

С уважением,

LB


person user257938    schedule 21.10.2011    source источник
comment
Это вызвало проблемы с прослушиванием хэша URL-адреса jQuery Mobile. $.mobile.hashListeningEnabled = false; решил.   -  person Petrus Theron    schedule 28.02.2012


Ответы (1)


Facebook недавно изменил свой механизм аутентификации, добавив эти символы #= в конец своего ответа. Символ # в конце строки на самом деле создает проблему. Таким образом, вы можете либо обрезать запрос, либо выполнить перенаправление, которое будет работать нормально.

person Robin    schedule 21.10.2011
comment
Что вы имеете в виду, чтобы усечь запрос? - person capdragon; 13.06.2012
comment
@capdragon: извлеките URL-адрес, удалите #= в конце и повторите запрос URL-адреса, используя любой метод (ajax, перенаправление и т. д.) - person Robin; 30.11.2012