내 목적은 사용자가 브라우저를 닫은 후에도 로그인 상태를 유지하도록하기 위해 로그인 양식의 확인란을 사용하는 것입니다. 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
WEBrick에서 올바른 매개 변수가 있다고 생각합니다. 매개 변수 : { "utf8"=> "✓", "authenticity_token"=> "q702NkNyTh08PRkLTt9TF2grtmVYiNYdXIUj3G + pszs ="{ "email"=> => "로그인"} – Bazley
음 ... 그래, 네가 그렇게 생각하는 것 같아. 권리. 음, 컨트롤러에서 세션과 params 해시로 무엇을하고 있습니까? 코드의 다른 곳의 기본 상태로 재설정 할 수 있습니까? – Andrew
비 영구적 인 로그인/로그 아웃 코드는 영구 로그인 코드와 어울리는 것으로 보입니다. – Bazley