非常に基本的でなければならないことについて助けが必要です。私はRails 3とAuthlogicを連携させるための優れたチュートリアルに従ってきました。多くの場所で参照されているのと同じ非常に基本的な認証シェルです。しかし、私はちょうどログアウト機能の仕事をすることはできません。私はあらゆる種類のものを試してみました。だから私は助けが必要です。たぶん私は正しく理解していないが、ここでは問題です。Rails/Authlogic - UserSession.destroyはセッションを終了しません。
最後の行:@ user_session.destroyはセッションを終了しません。
詳細: 私はWebサービス上で作業していますので、私は.xml形式の要求と対話しています...そして、私はcURLを使ってテストしています。
私の大きな問題以外はすべて正常に動作します。私はユーザーにデータベースをシードします。
私が最初とcookies.txtログインせずに次の操作を行い、ブランク(またはいくつかの他のユーザーのCookieている) - >
curl -v -H "Accept: text/xml" -X GET --cookie cookies.txt http://localhost:3000/user.xml
私の要求が予想
として(何のセッションを)拒否していません私がこれを使用してログインしたとき - >
curl -v -H "Accept: text/xml" -X POST -d 'user_session[email][email protected]&user_session[password]=secret' --cookie-jar cookies.txt http://localhost:3000/user_session.xml
新しいセッションが作成され、私は自分の心のコンテンツに以前のGETを行うことができます。私はログアウト時にすべてが別のユーザーのクッキーが動作しない、クッキーを使用していないことなど
を動作しません使用して、その中で正常に動作するが... ...これを行う - >
curl -v -H "Accept: text/xml" -X DELETE --cookie cookies.txt http://localhost:3000/user_session.xml
UserSessionsControllerの#破壊アクションは
def destroy
@user_session = UserSession.find
@user_session.destroy
respond_to do |format|
format.html { redirect_to(:users, :notice => 'Goodbye!') }
format.xml { head :ok }
end
end
と呼ばれ、アクション内の行 - user_session.destroy @ @user_session = UserSession.findと が実行されています。エラーもテストもない@user_session =破棄後のUserSession.findは、期待通りにnilを生成します。
HOWEVER ...次回のGETリクエストでは、この同じクッキーが期限切れになるはずです。その特定のユーザーのIDが発生し、情報が配信されます - セッションが存在し続けるかのように!
私は、これは基本的なものですが、完全を期すためにここに私のApplicationControllerに知っている:
class ApplicationController < ActionController::Base
#protect_from_forgery
helper_method :current_user_session, :current_user
private
def current_user_session
return @current_user_session if defined?(@current_user_session)
@current_user_session = UserSession.find
end
def current_user
return @current_user if defined?(@current_user)
@current_user = current_user_session && current_user_session.record
end
def require_user
unless current_user
respond_to do |format|
format.xml { head :unauthorized }
end
return false
end
end
def require_no_user
if current_user
respond_to do |format|
format.xml { head :bad_request }
end
return false
end
end
@user_session = UserSession.find current_user_session中 - ログアウトユーザーを作成し、永遠にあれば...そうしていきますログイン時に作成された元のCookieが提供されます。
私は何を試してもセッションを終了できません。私はキャッシュヒットが発生するのを見て、ActiveRecordのキャッシュをオフにすることを掘り下げました。キャッシングはオフになり、何も変更されていません。私はこれが私の一部での理解の重大な誤りかAuthlogicで何かを理解しているか、動かないかのどちらかと考えています。
ありがとうございました!いいえ、わかりませんでした。私は本当に助けに感謝します。応答遅れて申し訳ありませんが、私は休暇のために遠く離れていました。私は私の検索でRailsのこの「機能」に遭遇していなかったことに驚いています。 –