2011-01-17 3 views
0

내 목적은 사용자가 브라우저를 닫은 후에도 로그인 상태를 유지하도록하기 위해 로그인 양식의 확인란을 사용하는 것입니다. stay_signed_in 체크하면 따라서 1이고, 0이 아닌 경우 :레일스 양식에서 사용할 check_box 받기

<div class="field"> 
    <%= f.check_box :stay_signed_in %> Stay signed in? 
</div> 

: 나는 체크 박스 (보기> 세션> new.html.erb)의 로그인 형태로이 코드를 사용하고 있습니다. 나는 그 (시도하는) 세션 변수를 설정 : (세션 컨트롤러에서) stay_signed_in : true 또는 false가의 값에 따라에 staysignedin

def create 
    session[:staysignedin] = (params[:session][:stay_signed_in] == "1") ? true : false 
    ... 
end 

이 코드에 뭔가 문제가있다. 상자가 선택되어 있고 : stay_signed_in이 1 인 경우에도 세션 [: staysignedin]은 절대로 true로 설정되지 않습니다. 내가 어디로 잘못 가고 있니?

편집 :의 나머지 기호 인 형태로 다음과 같습니다 :

<%= form_for(:session, :url => sessions_path) do |f| %> 

    <div class="field"> 
    <%= f.label :email %><br /> 
    <%= f.text_field :email %> 
    </div> 

    <div class="field"> 
    <%= f.label :password %><br /> 
    <%= f.password_field :password %> 
    </div> 

    <div class="field"> 
    <%= f.check_box :stay_signed_in %> 
    Stay signed in on this computer? 
    </div> 

    <div class="actions"> 
    <%= f.submit "Sign in" %> 
    </div> 

<% end %> 

편집 : 보정 : [: staysignedin]은 세션 설정입니다 제대로 참 또는 거짓으로 결함이 있어야합니다 그래서 다른 곳에서. 문제는 '로그인 상태 유지'를 선택하면 브라우저를 닫고 다시 열 때 사용자가 아직 로그인하지 않은 것입니다. '로그인 상태를 유지 하시겠습니까?' 확인란을 선택하면 영구 로그인 코드 만 남기고 양식에있는 모든 관련 코드는 제대로 작동합니다.

def sign_in(user) 
    if session[:staysignedin] 
    cookies.permanent.signed[:remember_token] = [user.id, user.salt] 
    else 
    session[:userid] = user.id 
    end 
    self.current_user = user 
end 

def sign_out 
    if session[:staysignedin] 
    cookies.delete(:remember_token) 
    else 
    session[:userid] = nil 
    session[:staysignedin] = nil 
    end 
    self.current_user = nil 
end 

답변

0

나머지 양식 코드는 어떻게 생깁니 까?

내 생각 엔입니다 : stay_signed_in는 params[:session][:stay_signed_in]에 저장되지 않고 params[:something_else][:stay_signed_in]하거나

params[:stay_signed_in]가 로컬에 WEBrick에서 실행하는 경우 당신은 당신을 도울 것이다, 각 요청에 게시 된 매개 변수를 볼 수 있습니다 올바른 매개 변수 키가 있는지 확인하십시오.

이 -EDIT- 마지막 코멘트에

을 바탕으로, 나는 당신의 인증 로직을 처리 할 수 ​​Devise를 사용하는 것이 좋습니다 것입니다. 구현이 매우 쉽고, 레일스 3와 완벽하게 호환되며, 세션을 처리하고 로그인 상태를 기억하는 코드가 내장되어 있습니다.

간단한 세션에서이 문제에 오래 걸리지 않는 것이 좋습니다. 가볍고 견고하며 잘 문서화 된 유용한 플러그인이있는 경우

소개는 Railscast을 참조하십시오.

+0

WEBrick에서 올바른 매개 변수가 있다고 생각합니다. 매개 변수 : { "utf8"=> "✓", "authenticity_token"=> "q702NkNyTh08PRkLTt9TF2grtmVYiNYdXIUj3G + pszs ="{ "email"=> => "로그인"} – Bazley

+0

음 ... 그래, 네가 그렇게 생각하는 것 같아. 권리. 음, 컨트롤러에서 세션과 params 해시로 무엇을하고 있습니까? 코드의 다른 곳의 기본 상태로 재설정 할 수 있습니까? – Andrew

+0

비 영구적 인 로그인/로그 아웃 코드는 영구 로그인 코드와 어울리는 것으로 보입니다. – Bazley

관련 문제