OK… Tutaj być the zawartość the blog poczta… jon
Rubin: Using reset_session w Poręcz z Ogórek i Webrat
I segregować the następujący pluskwa:
Wszystkie the Poręcz ochrona przewdonik mówić że ty musieć reset_session po the użytkownik bela dalej lub bela dalej. To rozjaśniać to the sesja i zmuszać nowy sesja ID. Ono wydawać się tam być tam Poręcz pluskwa odnosić sie reset_session przez lata. , I teraz martwić się że tam być konflikt gdzieś odnosić sie Poręcz infrastruktura and/or Webrat.
W mój nazwa użytkownika akcja, I dzwonić reset_session i wtedy stawiać ładny wiadomość w błysk. Gdy I właściwie używać the strona internetowa, I móc (przez Firefox) że I dostawać nowy sesja ID, i I móc mój błyskowy wiadomość. , Gdy I pisać test dla tamte dwa rzecz, the błyskowy wiadomość dostawać przegrany, i I dostawać nowy sesja ID w mój ciastko. Ono być prawie tak jakby the nowy sesja ignorować, i the stary sesja używać.
I być zmartwiony, ale I móc dokładnie dokąd the problem być. I znać że tam być specjalny Poręcz kod ten rękojeść sesyjny ciastko gdy ty robić integracja testowanie.
I używać actionpack-2.3.8 i webrat-0.7.1.
Tutaj być jak I zrobić mój best wokoło the problem.
Najpierw wszystko, I przechować mój sesja w the baza danych. Hence, I tworzyć ActiveRecord model ręcznie sesyjny rejestr:
klasowy Sesja <� ActiveRecord::Base=""> # Poręcz reset_session być reset_session ale kłopot dla. I brać
# liczyć się w mój swój ręka. Ten kod musieć jeżeli my zatrzymywać
# stawiać nasz sesja w the baza danych.
def self.nuke_session (session_id)
find_by_session_id! (session_id) .destroy
końcówka
końcówka
Ponieważ I być authlogic, mój logout akcja patrzeć to jak to:
def niszczyć
current_user_session.destroy
# Unikać sesyjny fiksacja atak. Ono móc niepotrzebny, ale ono być
# konieczny the test przepustka.
sesja [: test_that_this_disappears] = "test_that_this_disappears"
session_id = ciastko [ActionController:: Base.session_options [: klucz]]
Session.nuke_session (session_id)
reset_session
redirect_to: akcja =>: logged_out
końcówka
Mój nazwa użytkownika akcja być to jak akcja:
def tworzyć
@user_session = UserSession.new (params [: user_session])
jeśli @user_session.valid?
powrót odpłacać się: akcja =>: nowy
końcówka
# Unikać sesyjny fiksacja atak resetting the sesja.
reset_session
@user_session = UserSession.new (params [: user_session])
@user_session.save!
# Dla niektóre powód, błysk, reset_session, Ogórek, Etc. dostawać niektóre,
# w ten sposób I musieć the błyskowy wiadomość przez parametr.
redirect_to (root_url (: nazwa użytkownika => 1))
końcówka
Zamiast wiadomość przez błysk, I przechodzić zapytanie parametr.
I sprawdzać dla ten parametr w mój ApplicationController:
before_filter: check_for_login_message
…
# Dla niektóre powód, błysk, reset_session, Ogórek, Etc. dostawać niektóre.
# Hence, po nazwa użytkownika, my musieć the błyskowy wiadomość przez zapytanie parametr
# raczej przez błysk.
#
# Jeżeli I musieć ten jakby rzecz znowu, I tworzyć lookup stół folować
# wiadomość.
def check_for_login_message
flash.now [: success_message] = "Nazwa użytkownika pomyślny!" jeżeli params [: nazwa użytkownika]
końcówka
W końcu, I mieć to w pełnometrażowy kartoteka:
# Ten test musieć. W rzeczywistości, ono pracować gdy ty używać twój wyszukiwarka.
#, Tam być pluskwa gdzieś między Poręcz i Webrat który zapobiegać
# ono od działanie gdy ty używać Ogórek. Jakoś, reset_session łamać.
#
# Scenariusz: dalej musieć twój sesyjny ciastko
# I być na the homepage
# Gdy I patrzeć mój sesyjny ciastko
# I I notować dalej
# Wtedy I musieć różny sesyjny ciastko
Ten test polegać na te krok:
# Ten test musieć. W rzeczywistości, ono pracować gdy ty używać twój wyszukiwarka.
#, Tam być pluskwa gdzieś między Poręcz i Webrat który zapobiegać
# ono od działanie gdy ty używać Ogórek. Jakoś, reset_session łamać.
#
# Dawać/^I spojrzenie przy mój sesja cookie$/
# @cookie = ciastko [ActionController:: Base.session_options [: klucz]]
# końcówka
#
# Wtedy/^I musieć różny sesja cookie$/
# new_cookie = ciastko [ActionController:: Base.session_options [: klucz]]
# new_cookie.sh ould_not == @cookie
# końcówka