O.K.… Ist hier der Inhalt des Blogpfosten… jon
Rubin: Using reset_session in den Schienen mit Gurke und Webrat
Ich archivierte die folgende Wanze:
Alle Schienensicherheitsführer sagen, dass Sie reset_session benennen sollten, nachdem der Benutzer heraus anmeldet oder loggt. Dieses löscht heraus den Lernabschnitt und zwingt eine neue Lernabschnitt Identifikation verursacht zu werden. Es scheint, dass es einige Schienenwanzen gegeben hat, die auf reset_session in den Jahren bezogen werden. Jedoch werde ich jetzt gesorgt, dass es einen Konflikt gibt, der irgendwo auf Infrastruktur und/oder Webrat Prüfung der Schienen bezogen wird.
In einer meiner LOGON-Tat benenne ich reset_session und setze dann eine nette Mitteilung im Blitz um. Wenn ich wirklich die Web site verwende, kann ich sehen (über Firefox) dass ich eine neue Lernabschnitt Identifikation erhalte, und ich kann meine grelle Mitteilung sehen. Jedoch wenn ich Tests für jene zwei Sachen schreibe, geht die grelle Mitteilung verloren, und ich erhalte nicht eine neue Lernabschnitt Identifikation in meinen Plätzchen. Sie ist fast, als ob der neue Lernabschnitt ignoriert wird, und der alte Lernabschnitt wird verwendet.
Es tut mir leid aber ich kann nicht genau erklären, wo das Problem ist. Ich weiß, dass es speziellen Schienencode gibt, der Lernabschnittplätzchen behandelt, wenn Sie Integrationsprüfung tun.
Ich verwende actionpack-2.3.8 und webrat-0.7.1.
Ist hier, wie ich mein Bestes tat, um um das Problem zu arbeiten.
Zuerst speichere ich meine Lernabschnitte in der Datenbank. Folglich verursachte ich ein ActiveRecord Modell, um Lernabschnittaufzeichnungen manuell zu löschen:
der Kategorie Lernabschnitt <� ActiveRecord::Base=""> # Schienen reset_session ist nichts aber Mühe für uns gewesen. Ich nehme
# macht in meine eigenen Hände aus. Dieser Code muss ändern, wenn wir stoppen
#, unsere Lernabschnitte in die Datenbank einsetzend.
def self.nuke_session (session_id)
find_by_session_id! (session_id) .destroy
Ende
Ende
Da ich die authlogic Anwendung bin, schaut meine Logouttätigkeit etwas Ähnliches:
def zerstören
current_user_session.destroy
# Lernabschnittfixierungangriffe vermeiden. Dieses kann überflüssig scheinen, aber es war
# notwendig, den Testdurchlauf zu bilden.
Lernabschnitt [: test_that_this_disappears] = „okay“
session_id = Plätzchen [ActionController:: Base.session_options [: Schlüssel]]
Session.nuke_session (session_id)
reset_session
redirect_to: Tätigkeit =>: logged_out
Ende
Meine LOGON-Tätigkeit ist etwas Ähnliches:
def verursachen
@user_session = UserSession.new (Params [: user_session])
es sei denn @user_session.valid?
Rückkehr überträgt: Tätigkeit =>: neu
Ende
# Lernabschnittfixierungangriffe vermeiden, indem Sie den Lernabschnitt zurückstellen.
reset_session
@user_session = UserSession.new (Params [: user_session])
@user_session.save!
# aus irgendeinem Grund, erhalten Blitz, reset_session, Gurke, etc. nicht entlang,
# so muss ich die grelle Mitteilung über einen Parameter weiterleiten.
redirect_to (root_url (: LOGON => 1))
Ende
Anstatt, eine Mitteilung über Blitz einzustellen, führe ich einen Fragenparameter.
Ich überprüfe auf diesem Parameter in meinem ApplicationController:
before_filter: check_for_login_message
…
# aus irgendeinem Grund, erhalten Blitz, reset_session, Gurke, etc. nicht entlang.
# folglich, nach LOGON, müssen wir die grelle Mitteilung über einen Fragenparameter weiterleiten
# eher als über Blitz.
#
#, wenn ich diese Art der Sache wiederholen muss, stelle ich eine Nachschlagentabelle voll her
# von den Mitteilungen.
def check_for_login_message
flash.now [: success_message] = „LOGON erfolgreich!“ wenn Params [: LOGON]
Ende
Schließlich habe ich dieses in einer Eigenschaftsakte:
# sollte dieser Test arbeiten. Tatsächlich funktioniert es, wenn Sie Ihren Browser benutzen.
# jedoch, gibt es eine Wanze irgendwo zwischen Schienen und Webrat, das verhindert
# es vom Arbeiten, wenn Sie Gurke benutzen. Irgendwie ist reset_session defekt.
#
# Drehbuch: das Anmelden sollte Ihr Lernabschnittplätzchen ungültig erklären
# gegeben bin ich auf dem homepage
#, wenn ich mein Lernabschnittplätzchen betrachte
# und ich werden angemeldet
# dann sollte ich ein anderes Lernabschnittplätzchen essen
Dieser Test beruht auf diesen Schritten:
# sollte dieser Test arbeiten. Tatsächlich funktioniert es, wenn Sie Ihren Browser benutzen.
# jedoch, gibt es eine Wanze irgendwo zwischen Schienen und Webrat, das verhindert
# es vom Arbeiten, wenn Sie Gurke benutzen. Irgendwie ist reset_session defekt.
#
# tun gegebener/^I Blick auf meinen Lernabschnitt cookie$/
# @cookie = Plätzchen [ActionController:: Base.session_options [: Schlüssel]]
# Ende
#
# dann sollte/^I einen anderen Lernabschnitt cookie$/haben tun
# new_cookie = Plätzchen [ActionController:: Base.session_options [: Schlüssel]]
# new_cookie.sh ould_not == @cookie
# Ende