REKO…, Är här det nöjt av blogen postar… jon
Ruby: Using reset_session i stänger med gurkan och Webrat
Jag sparade efter bugga:
Alla stångsäkerhet vägleder något att säga att dig bör appellreset_sessionen, efter användaren har loggat in eller har loggat ut. Detta görar klar ut perioden och tvingar en ny periodsLEGITIMATION som ska skapas. Det verkar där har varit några stänger buggar släkt till reset_sessionen över åren. Emellertid I-förmiddagen oroade nu att det finns en konflikt någonstans släkt till stängers testa infrastruktur och/eller Webrat.
I min inloggningshandling I-appellreset_session och därefter satt ett trevligt meddelande i pråligt. När jag använder faktiskt websiten, jag kan se (via Firefox) att I-förmiddagen som får en ny periodsLEGITIMATION och jag kan se mitt pråliga meddelande. Emellertid när jag skriver, testar för den två saker, det pråliga meddelandet får borttappadt, och jag får inte en ny periodsLEGITIMATION i min kakor. Den är nästan som, om den nya perioden ignoreras, och den gammala perioden används.
Ledsen förmiddag I, utan jag kan inte berätta exakt var problemet är. Jag vet att det finns speciala stänger kodifierar att handtagperiodskakor, när du gör att testa för integration.
Förmiddag I using actionpack-2.3.8 och webrat-0.7.1.
Är här hur jag gjorde mitt bäst för att fungera runt om problemet.
Först allra, I-förmiddag som lagrar min perioder i databasen. Hence jag skapade en ActiveRecord modellerar manuellt för att ta bort periodsrekord:
klassificera den periods- <� ActiveRecord::Base=""> nr. stängers reset_sessionen har varit ingenting utom besvärar för oss. Ta för förmiddag I
nr. materier in i mitt eget räcker. Detta kodifierar ska måste att ändra, om vi stoppar
nr. sätta våra perioder i databasen.
def self.nuke_session (session_id)
find_by_session_id! (session_id) .destroy
avsluta
avsluta
Sedan I-förmiddag using authlogic, min logouthandlinglooks något något liknande detta:
def förstör
current_user_session.destroy
Nr. undvik periodsfixationattacker. Detta kan verka överflödigt, men den var
nr. nödvändigt att göra testar passerar.
period [: test_that_this_disappears] = ”ok”,
session_id = kakor [ActionController:: Base.session_options [: stämma]],
Session.nuke_session (session_id)
reset_session
redirect_to: handling=>: logged_out
avsluta
Min inloggningshandling är något något liknande detta:
def skapar
@user_session = UserSession.new (params [: user_session])
om inte @user_session.valid?
retur framför: handling=>: nytt
avsluta
Nr. undvik periodsfixationattacker, genom att nollställa perioden.
reset_session
@user_session = UserSession.new (params [: user_session])
@user_session.save!
Nr. för något resonera, pråligt, reset_sessionen, gurkan, Etc. får inte along,
nr. så jag måste att passera det pråliga meddelandet via en parameter.
redirect_to (root_url (: inloggnings=> 1))
avsluta
I stället för inställning av ett meddelande via pråligt jag passerar en queryparameter.
Jag kontrollerar för denna parameter i min ApplicationController:
before_filter: check_for_login_message
…,
Nr. för något resonera, pråligt, reset_sessionen, gurkan, Etc. får inte along.
Nr. Hence, efter inloggning, vi måste att passera det pråliga meddelandet via en queryparameter
nr. ganska än via pråligt.
nr.
Nr., om jag måste att göra denna sort av tinget igen, jag ska skapar en referens bordlägger mycket
nr. av meddelanden.
defcheck_for_login_message
flash.now [: success_message] = ”lyckad inloggning!”, om params [: inloggning]
avsluta
Slutligen jag har denna i ett särdrag att spara:
Nr. detta testar bör fungera. I faktum det fungerar, när du använder din webbläsare.
Nr. emellertid, det finns en bugga någonstans mellan stänger och Webrat som förhindrar
nr. det från arbete, när du använder gurkan. Somehow reset_sessionen är bruten.
nr.
Nr. scenario: inloggning bör göra din periodskaka ogiltig
Nr. given I-förmiddag på homepagen
Nr., när jag ser min periodskaka
Nr. och loggad in I-förmiddag
Nr. därefter jag bör ha en olik periodskaka
Att testa, relies på dessa kliver:
Nr. detta testar bör fungera. I faktum det fungerar, när du använder din webbläsare.
Nr. emellertid, det finns en bugga någonstans mellan stänger och Webrat som förhindrar
nr. det från arbete, när du använder gurkan. Somehow reset_sessionen är bruten.
nr.
Nr. den givna -/^Ilooken på min period cookie$/gör
nr. @cookie = kakor [ActionController:: Base.session_options [: stämma]],
nr. avsluta
nr.
Nr. därefter/^I bör ha en olik period cookie$/gör
nr. new_cookie = kakor [ActionController:: Base.session_options [: stämma]],
nr. @cookie för new_cookie.sh ould_not==
nr. avsluta