私の目的は、ログインフォームのチェックボックスを使用して、ブラウザを閉じた後でもログインを維持できるようにすることです。 stay_signed_inがチェックすると、したがって1で、0ではない場合:Railsフォームで動作するcheck_boxを取得する
<div class="field">
<%= f.check_box :stay_signed_in %> Stay signed in?
</div>
:私は、チェックボックス(ビュー>セッション> new.html.erb)のためのサインイン形式でこのコードを使用しています。その後、I(試みに)は、セッション変数を設定します。の値に応じて、trueまたはfalseのいずれかにstaysignedin:(セッションコントローラ内)stay_signed_in:
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 ="、 "session" => {"email" => => "1"}、 "コミット" => "ログイン"} – Bazley
ええと、そういうことがあるようです右。さて、コントローラでセッションとparamsハッシュで何をやっていますか?コード内の他のどこかのデフォルト状態にリセットすることは可能でしょうか? – Andrew
非常設のサインイン/アウトコードは、永久サインインコードと何らかの形で一致しているようです。 – Bazley