2011-04-28 7 views
2

私の更新ユーザープロファイルフォームでは、最初のフィールドにユーザーに現在のパスワードを入力するよう求められます。彼女がフォームを提出すると、他のフィールドの変更を受け入れる前にパスワードを確認します。現在、ユーザーコントローラでこれをやっているところは次のとおりです。プロファイルを更新するためにパスワードを入力するようにユーザーに要求する

これを行うには良い方法があるように感じます。たとえば、私は、ユーザーモデルで検証に合ったパスワードを作ることができます。その後、formtasticは私のためのエラーメッセージを自動的に処理します(上記の私の醜いフラッシュアプ​​ローチとは対照的に)。私は

validate :password_match?, :on => :update 

そして

def password_match? 
    has_password(params[:user][:password]) 
end 

でこれをやってみました。しかし疑いがあるのparamsとしてのモデルからはアクセスできません。

私はこれを行うために20分間SOを検索しましたが、DeviseまたはAuthlogicに関係しなかったものは見つかりませんでした。私は最初から認証をしています(すべてうまくいきます:サインイン、セッションなど)。

よろしくお願いいたします。

+0

あなたは(https://github.com/plataformatec/devise)[考案]使用したい場合は、これは[編集ユーザー登録ビュー](HTTPSであなたのために内蔵されるだろう:// githubの。 com/plataformatec/devise/blob/master/app/views/devise/registrations/edit.html.erb#L15) – Zabba

+0

次回は、必ずdeviseを使用します。私は最近Railsを学び、ゼロから認証を構築するチュートリアルに従った。私は以来、私のプロジェクトのためにそのコードを取り組んできました。 –

答えて

1

更新時にコントローラー上のフィルターを使用してください。 プロファイルコントローラー上で変更する必要はありません。

before_filter password_match, :only => :update 

次にプライベートとしてボトムに。


private 

def password_match 
    @user = User.find(params[:id]) 
    @user.has_password?(params[:user][:password]) 

+0

この道は私をウサギの穴に連れて行った。文脈にあなたをドラッグすることはおそらくそれに値するものではありません。私たちは何度も何度も行き来する必要があります。私は私の元の解決策に固執するつもりです。私は、パスワードフィールドにカスタムエラーを追加するためにerrors.addを正しく使用する方法がわからないという事実に陥るかもしれないと思います。とにかく、それは良い提案だったので、答えを受け入れる。 –

+0

コーヒーを飲み、1秒間安静にしてください。あなたはエラーは必要ありません。画面上部の素敵なフラッシュエラーはどうですか?単にflash.now [:error] = 'パスワードがあなたの現在のパスワードと一致しません'とそれを追加します:) – daniel

+0

これは私の元のアプローチでしたが、上記の最初のコードサンプルを参照してください。私はそれに固執することに決めました。 –

関連する問題