매우 기본적인 것이어야합니다. 필자는 Rails 3와 Authlogic을 함께 사용하기위한 훌륭한 자습서를 따랐습니다. 여러 곳에서 참조되는 것과 동일한 매우 기본적인 인증 셸입니다. 하지만 로그 아웃 기능을 작동시키지 않습니다. 나는 모든 종류의 일을 시도하는 데 시간을 보냈습니다. 그래서 도움이 필요해. 어쩌면 그저 내가 올바르게 이해하지 못하고 있지만 여기에 문제가 있습니다 :Rails/Authlogic - UserSession.destroy가 세션을 종료하지 않습니다.
결론 : @ user_session.destroy는 세션을 종료하지 않습니다.
Details : .xml 형식 요청과 만 상호 작용할 수 있도록 웹 서비스 작업 중입니다 ... 그리고 cURL을 사용하여 테스트하고 있습니다.
내 모든 주요한 문제를 제외하고 모든 것이 잘 작동합니다. 필자는 Users를 사용하여 데이터베이스를 시드합니다.
내가 먼저 로그인하지 않고 다음을 수행하고를 Cookies.txt는 (다른 사용자의 쿠키 또는 인) 빈 때 - 내 요청은 예상대로 (더 세션을) 거부하지
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가 예상대로 생성됩니다.
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에서 - 아웃 로그인 한 사용자를 생산하고 영원히 경우 ... 계속 그렇게 할 것 로그인시 생성 된 원래 쿠키가 제공됩니다.
내가 시도하는대로 세션을 종료 할 수 없습니다. 캐시 히트가 발생하는 것을 보면서 ActiveRecord 캐싱을 끄는 것에 대해서도 집중했습니다. 캐싱이 해제되고 아무 것도 변경되지 않았습니다. 나는 이것이 내가 이해하지 못하거나 작동하지 않는 Authlogic으로 내 부분에 대한 이해의 중대한 오류라고 생각한다.
의견이 있으십니까 ??
감사합니다. 아니요. 좋은 설명이나 해결책을 찾지 못했습니다. 도움에 정말 감사드립니다. 응답 지연에 대한 미안하지만 나는 휴일을 위해 아주 멀리있었습니다. 내가 검색 할 때 Rails의이 '기능'을 사용하지 않았다는 사실에 놀랐습니다. –