2011-02-01 5 views
14

레일 3 용 Devise를 사용하고 있습니다. 페이지 캐싱을 위해 로그인/아웃 정보를위한 쿠키를 설정해야합니다.Devise로 로그인/로그 아웃 할 때 쿠키를 설정하는 방법

Devise를 사용하여 로그인/로그 아웃 할 때 쿠키를 설정하는 가장 간단한 방법은 무엇입니까? 나는 '컨트롤러를 사용자 정의하는 방법'을 읽었지만 많은 작업이 될 것으로 보인다.

답변

12

사실이 유사한 컨트롤러를 만들 수에 로그에 쿠키를 추가하고 로그 아웃 할 수있는 유증의 SessionsController을 확장 너무 어렵지 않을 것이다 :

다음
# app/controllers/sessions_controller.rb 
class SessionsController < Devise::SessionsController 
    # POST /resource/sign_in 
    def create 
    cookies[:sign_in] = "Sign in info you want to store" 
    super 
    end 

    # GET /resource/sign_out 
    def destroy 
    cookies[:sign_out] = "Sign out info you want to store" 
    super 
    end 
end 

당신이를 추가해야 당신의 노선을 따르십시오.

devise_for :users, :controllers => { :sessions => "sessions" } 

그곳에 당신을 가장 많이 데려다 줄 것입니다. @에서 적응

Warden::Manager.after_set_user do |user,auth,opts| 
    auth.cookies[:signed_in] = 1 
    end 

    Warden::Manager.before_logout do |user,auth,opts| 
    auth.cookies.delete :signed_in 
    end 
+0

삭제됩니다 경우

는 나에게 설정 옵션을 기억한다면 이메일을 기억하기 위해 쿠키를 추가합니다. 그것은 작동합니다! 감사. –

+0

http://stackoverflow.com/questions/4301249/how-to-change-the-default-path-of-view-files-in-a-rails-3-controller의 솔루션을 사용하여 원본을 사용할 수 있습니다 조회수. –

+0

쿠키가 iframe에 설정되어 있지 않습니다. 로그인하면'Ecwid' 임베디드 애플리케이션의 로그인 페이지에서 나를 리다이렉트합니다. – kpp

18

, 다른 솔루션은 devise.rb에 예를 들어 소장의 콜백을 사용하는 것입니다 당신 devise.rb 이니셜 라이저의 끝. 아니 그것이 내가 세션/new.html.haml을 복사 한 쿠키

Warden::Manager.after_authentication do |user, auth, opts| 
    if user.remember_me 
    auth.cookies[:email] = {value: user.email, expires: 2.weeks.from_now} 
    else 
    auth.cookies.delete :email 
    end 
end 
+0

signed_in 컨트롤에 쿠키를 설정하는 좋은 방법. 나는 Accepted answer에 언급 된대로 SessionsController를 시도했지만, 역시 효과가 있었다. 그러나 사용자가 '비밀번호 분실'방법으로 비밀번호를 재설정 한 직후 쿠키를 설정하지 않았다. Warden 콜백을 사용하여 예상대로 작동했습니다! –

+0

이것은 훨씬 더 효과적입니다. 옴니버스를 통해 로그인하거나 사용자가 비밀번호를 업데이트하고 다시 로그인해야하는 경우와 같은 상황을 처리합니다. – ScotterC

+4

@karlrosaen ~'auth.cookies'는 더 이상 지원되지 않습니다 – Roland

3

칼 - rosaen 새로운 이니셜을 만드는이 솔루션을 받거나 추가 : 고안이 소장 기반으로하므로

관련 문제