О'КЕЙО… Здесь содержание jon столба блога…
Рубин: Using reset_session в рельсах с огурцом и Webrat
Я хранил следующий черепашку:
Все направляющие выступы обеспеченностью рельсов говорят что вы должны вызвать reset_session после того как потребитель вносит в журнал дальше или вносит в журнал вне. Это освобождает вне встречу и принуждает новое удостоверение личности встречи быть созданным. Оно кажется были немного черепашок рельсов отнесенных к reset_session над летами. Однако, я теперь потревожен что будет конфликт где-то отнесенный к инфраструктуре and/or Webrat испытание рельсов.
В мое действие имени пользователя, я вызываю reset_session и после этого кладу славное сообщение в вспышке. Когда я фактическ использую вебсайт, я могу увидеть (через Firefox) что я получаю новое удостоверение личности встречи, и я могу увидеть мое внезапное сообщение. Однако, когда я пишу испытания для тех 2 вещей, внезапное сообщение получает потерянный, и я не получаю новое удостоверение личности встречи в моих печеньях. Оно почти если новая встреча игнорируется, и старая встреча используется.
Я огорченн, но я не могу сказать точно где проблема. Я знаю что будет специальное Кодий рельсов регулирует печенья встречи когда вы делаете испытание внедрения.
Я использую actionpack-2.3.8 и webrat-0.7.1.
Здесь будет как я сделал мое самое лучшее для работы вокруг проблемы.
Прежде всего, я храню мои встречи в базе данных. Следовательно, я создал модель ActiveRecord ручно для того чтобы уничтожить показатели встречи:
reset_session встречи <� ActiveRecord::Base=""> # рельсов типа было ничего но тревогой для нас. Я принимаю
# имеет значение в мои собственные руки. Это Кодий изменить если мы останавливаем
# кладущ наши встречи в базу данных.
def self.nuke_session (session_id)
find_by_session_id! (session_id) .destroy
конец
конец
В виду того что я использованием authlogic, мое действие logout смотрит что-нибудь подобное:
def разрушает
current_user_session.destroy
# избегите нападений фиксирования встречи. Это может показаться резервным, но оно было
# обязательно для того чтобы сделать пропуск испытаний.
встреча [: test_that_this_disappears] = «одобренн»
session_id = печенья [ActionController:: Base.session_options [: ключ]]
Session.nuke_session (session_id)
reset_session
redirect_to: => действия: logged_out
конец
Мое действие имени пользователя что-нибудь подобное:
def создается
@user_session = UserSession.new (params [: user_session])
если @user_session.valid?
возвращение представляет: => действия: ново
конец
# избегите нападений фиксирования встречи путем переустановить встречу.
reset_session
@user_session = UserSession.new (params [: user_session])
@user_session.save!
# по какой - либо причине, вспышка, reset_session, огурец, etc. не получают вперед,
# так я должен пройти внезапное сообщение через параметр.
redirect_to (root_url (: => имени пользователя 1))
конец
Вместо устанавливать сообщение через вспышку, я прохожу параметр вопроса.
Я проверяю для этого параметра в моем ApplicationController:
before_filter: check_for_login_message
…
# по какой - либо причине, вспышка, reset_session, огурец, etc. не получают вперед.
# следовательно, после имени пользователя, мы должны пройти внезапное сообщение через параметр вопроса
# довольно чем через вспышку.
#
# если я должен делать этот вид вещи снова, то, я создам таблицу взгляда вверх вполне
# сообщений.
check_for_login_message def
flash.now [: success_message] = «имя пользователя успешно!» если params, то [: имя пользователя]
конец
Окончательно, я имею это в архиве характеристики:
# это испытание должно работать. В действительности, оно работает когда вы используете ваш браузер.
# однако, будет черепашка где-то между рельсами и Webrat которое предотвращает
# оно от работы когда вы используете огурец. Как-то, reset_session сломленно.
#
# сценарий: вносить в журнал дальше должен invalidate ваше печенье встречи
# после того как я дал я нахожусь на домашняя страница
# когда я смотрю мое печенье встречи
# и я внесите в журнал дальше
# после этого я должен иметь по-разному печенье встречи
То испытание полагается на этих шагах:
# это испытание должно работать. В действительности, оно работает когда вы используете ваш браузер.
# однако, будет черепашка где-то между рельсами и Webrat которое предотвращает
# оно от работы когда вы используете огурец. Как-то, reset_session сломленно.
#
#, котор дали взгляд/^I на моей встрече cookie$/делает
# @cookie = печенья [ActionController:: Base.session_options [: ключ]]
# конец
#
# после этого/^I должно иметь по-разному встречу cookie$/делает
# new_cookie = печенья [ActionController:: Base.session_options [: ключ]]
# @cookie == ould_not new_cookie.sh
# конец