2011-01-17 8 views
0

私の目的は、ログインフォームのチェックボックスを使用して、ブラウザを閉じた後でもログインを維持できるようにすることです。 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 

答えて

0

残りのフォームコードはどのように見えるのですか?

私の推測では、ということです:stay_signed_inはparams[:session][:stay_signed_in]に保存されるのではなく、params[:something_else][:stay_signed_in]か、単にparams[:stay_signed_in]

ローカルWEBrickに上で実行している場合は、あなたを助けるそれぞれの要求に投稿されたパラメータを、見ることができますあなたが正しいパラメータキーを持っていることを確認してください。あなたの最後のコメントに基づいて

-EDIT-

、私はあなたの認証ロジックを処理するためにDeviseを使用することをお勧めします。実装が非常に簡単で、完全にRails 3と互換性があり、セッションを処理し、ログインしていることを覚えておくためのコードが組み込まれています。問題を記憶しているシンプルなセッションでは、軽量で堅実でよく文書化されたそのような良いプラグインがあるとき

イントロについては、Railscastを参照してください。

+0

私は、WEBrickから正しいパラメータがあると信じています:パラメータ:{"utf8" => "✓"、 "authenticity_token" => "q702NkNyTh08PRkLTt9TF2grtmVYiNYdXIUj3G + pszs ="、 "session" => {"email" => => "1"}、 "コミット" => "ログイン"} – Bazley

+0

ええと、そういうことがあるようです右。さて、コントローラでセッションとparamsハッシュで何をやっていますか?コード内の他のどこかのデフォルト状態にリセットすることは可能でしょうか? – Andrew

+0

非常設のサインイン/アウトコードは、永久サインインコードと何らかの形で一致しているようです。 – Bazley

関連する問題