2013-07-29 1 views
0

Я пытаюсь найти базовый логин OAuth Facebook с моего сайта.Сессия не задана, если она переместилась в ColdFusion/Railo

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

Я могу перейти на Facebook, войти и затем быть возвращенным, но как только я есть, переменная сеанса не существует.

Я абсолютно в тупике! Рассмотрим этот код:

lock scope="session" type="exclusive" timeout="30" { 
    session.source["state"] = createUUID(); 
} 

// BUG? 
// http://helpx.adobe.com/coldfusion/kb/missing-session-variables-using-cflocation.html 
if (isDefined("session.source.state")) { 

    location(url="https://www.facebook.com/dialog/oauth?client_id=#application.fbappid#&redirect_uri=#application.fbredirecturl#&state=#session.source["state"]#&scope=email,publish_actions", addtoken="true"); 

} 

Забавно ... session.source["state"] передается в URL на Facebook ... но по возвращении, оказывается он пошел!

Это действительно странное поведение.

Перенаправление с помощью Javascript не является вариантом. Он должен быть серверным.

У кого есть ключ к этому вопросу? Я использую Railo.

Thanks, Mikey.

+1

Во-первых, в реальной жизни сеанс может закончиться тайм-аутом, если пользователь находится на facebook достаточно долго. Во-вторых, cfdump свою область сеанса, чтобы увидеть, что на самом деле существует. –

+0

@DanBracuk Перемещение происходит, поэтому сеанс определяется и сбрасывает его, прежде чем перенаправление показывает UUID, как ожидалось. Я не на Facebook более 10 секунд, а сеансы настроены на 30 минут. Кроме того, другие сеансовые сессии все еще работают в другом месте на веб-сайте. Сбрасывание сеанса по возврату показывает другие вары, но не тот, который был создан до перенаправления. –

+0

Это происходит на безопасном (https) сервере? См. Https://issues.jboss.org/browse/RAILO-2773 –

ответ

0

Забавно ... session.source["state"] передается в URL на Facebook

Это не должно произойти до сессионного Варса. Должно быть что-то не так. Проследите свой код или напишите больше кода.

+0

Ах, но это так. Я подтвердил, что сеанс проверен, затем передан в Facebook, затем ... при перенаправлении обратно ... session.source ["state"] не найден. Он полностью умирает. Я считаю, что это проблема с cflocation (location). См. Ссылку в моем комментарии к коду. Это все еще актуальная ошибка? Если да, то как обойти это на стороне сервера? –

+0

@MichaelGiovanniPumo Я думаю, что до тех пор, пока ваш сеанс уже запущен до того, как вы сделаете cflocation, ваш пользователь не должен иметь проблемы с получением CFID/CFTOKEN в своем браузере. Когда они возвращаются, пока отправляется правая комбо CFID/CFTOKEN, CF может получить правильную сессию. Однако ничто в сеансе не должно передаваться в URL как текст. – Henry

+0

Я пробовал как addtoken = "true", так и addtoken = "false", но ни один из них не работает. Это то, о чем вы говорили? –

1

Каков адрес обратного вызова, с которого facebook возвращает пользователя? Причина, по которой я спрашиваю, может быть, вы перенаправляете пользователя на другое приложение.

Лучшая вещь todo заключается в том, чтобы сбрасывать application.applicationname на странице, устанавливая сеанс и страницу, на которую пользователь возвращается. убедитесь, что они совпадают, иначе сеанс не будет перенесен.

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