[RUBY-ON-RAILS] 청산 세션에서 정지 고안
RUBY-ON-RAILS청산 세션에서 정지 고안
사용자가 표준 고안 컨트롤러를 통해 로그 아웃 할 때, 유증 전체 세션 저장소뿐만 아니라 자신의 데이터를 파괴 보인다. 이 문제를 방지 할 수있는 방법이 있습니까? 나는 주위에 보관해야 다른 관련없는 데이터를 가지고있다.
session[:my_var] = "123"
유증을 통해 로그 아웃 ...
puts session[:my_var]
# => nil
해결법
-
==============================
1.SessionsController의 destroy¹ 방법은 다음과 같은 라인을 포함 :
SessionsController의 destroy¹ 방법은 다음과 같은 라인을 포함 :
signed_out = Devise.sign_out_all_scopes ? sign_out : sign_out(resource_name)
sign_out_all_scopes² 메소드 호출은 인수없이 warden.logout하고 sign_out³ 메소드 호출은 (범위) warden.logout.
logout⁴ 방법 상태의 문서 :
결론 : 특정 범위를 지정한 경우 sign_out 세션을 유지해야한다. 그러나, 나는 그렇게 할 수있는 방법이 표시되지 않습니다. sign_out_all_scopes은 항상 먼저라고하며,이 모든 사용자를 로그온 할 수 없습니다 경우에만 false를 반환합니다.
나도 그들의 이슈 트래커에 기능 요청을 게시하거나 사용자 인증 솔루션을 개발하는 것이 좋습니다. 지금은 레일 has_secure_password를 제공하고, 요즘 사람들은 이러한 문제에 실행 방지하기 위해 후자가는 것 같다.
¹ 고안 :: SessionsController 번호 파괴
² 고안 :: 컨트롤러 :: 도우미 # sign_out_all_scopes
³ 고안 :: 컨트롤러 :: 도우미 # sign_out
⁴ 소장 : 프록시 # 로그 아웃
-
==============================
2.(가) 장치의 버전을 지속에 대신 그냥 사용할 수, 세션 컨트롤러를 오버라이드 (override) 할 필요는 없습니다 :
(가) 장치의 버전을 지속에 대신 그냥 사용할 수, 세션 컨트롤러를 오버라이드 (override) 할 필요는 없습니다 :
config.sign_out_all_scopes = false
devise.rb 파일에서 원하는 동작을 얻을 수 있습니다.
-
==============================
3.나는 쇼핑 카트를 보존하기 위해 그랬던 것처럼 당신은 고안의 SessionController을 무시할 수 :
나는 쇼핑 카트를 보존하기 위해 그랬던 것처럼 당신은 고안의 SessionController을 무시할 수 :
sessions_controller.rb
class SessionsController < Devise::SessionsController def destroy order_id = session[:order_id] super session[:order_id] = order_id end end
routes.rb
devise_for :users, :controllers => { :sessions => "sessions" }
-
==============================
4.Mattheus뿐만 아니라. 문
Mattheus뿐만 아니라. 문
signed_out = (Devise.sign_out_all_scopes ? sign_out : sign_out(resource_name))
여러 역할에 체결 될 수있는 가능성을 고려 문 밖으로 가장 일반적인 로그, 아마도. , 당신이 경우에, 사용자가 하나 개의 역할로 로그인, 당신은 signout에 세션의 나머지 부분을 보존하려는 경우, 가장 쉬운 방법은 할 수 있습니다 :
$ git clone git://github.com/plataformatec/devise.git $ cd devise $ git branch my_devise $ git checkout my_devise
편집기에서 열기 애플 리케이션 / 컨트롤러 / 궁리 / sessions_controller.rb. 방법 파괴에 대체
signed_out = (Devise.sign_out_all_scopes ? sign_out : sign_out(resource_name))
와
signed_out = sign_out(resource_name)
저장하고 종료 편집기와 할
$ git commit -am "remove only warden data from session on logout, preserve other data."
프로젝트의 Gemfile에, 같은 고안 종속성을 설명
gem 'devise', :path => "[YOUR PATH]/devise", :branch => "my_devise"
from https://stackoverflow.com/questions/10153040/stop-devise-from-clearing-session by cc-by-sa and MIT license
'RUBY-ON-RAILS' 카테고리의 다른 글
[RUBY-ON-RAILS] 어떻게 고안의 SessionsController에 대한 before_filter를 건너 뛰려면? (0) | 2020.02.26 |
---|---|
[RUBY-ON-RAILS] RSpec에 컨트롤러 사양에서 사용하기 위해 소장 구성 (0) | 2020.02.26 |
[RUBY-ON-RAILS] 원격 => 사실이 호출되지 JS 방법 : form_for 레일 (0) | 2020.02.26 |
[RUBY-ON-RAILS] 뚱뚱한 모델 대 스키니 컨트롤러, 또는 내 컨트롤러 식욕 부진을해야 : 레일? (0) | 2020.02.25 |
[RUBY-ON-RAILS] 어떻게 레일 3.0.x 버전으로 Log4r를 구성? (0) | 2020.02.25 |