1

Deviseの例とチュートリアルでは、ユーザーモデルに次のようなものがあると言っています:

attr_accessible :name, :password, :password_confirmation, :remember_me

そこで、これについて 2 つの質問があります。

  1. 「名前」と「パスワード」をアクセス可能にする必要があるのはなぜですか? それらを保護したいのですが、devise でこれを変更できますか?

  2. ユーザーモデルで「password_confirmation」や「remember_me」などのフィールドは一体何をするのでしょうか? のようなものを書くことができるようUser.find(1).password_confirmationになりました。動作しますが、まったく意味がありません。

それに対処する方法は?

4

2 に答える 2

1

ログイン フォームとサインアップ フォームを作成するには、これら 4 つのフィールドすべてにアクセスできる必要があります。データベースのパスワード フィールドについて心配する必要はありません。それらは単なる仮想属性です。スキーマで確認できるデータベースの実際のフィールドは、実際には encrypted_pa​​ssword と salt です。それは実際には非常に機能的で、実績のある安全なシステムです。アプリの残りの部分の革新に集中し、devise にその作業を任せるべきです。これは非常にうまく機能します。

于 2012-07-15T07:15:32.703 に答える
0

私は答えを見つけたと思います。

  1. Devise は大量割り当てを使用しており、それについてできることは何もありません。それに関する Github の問題があります: https://github.com/plataformatec/devise/pull/718。大量割り当てに依存しないように Devise を変更する方法を考えています。ご意見をお聞かせいただければ幸いです。

  2. Devise が私たちの attr アクセス可能リストを定義する権利を奪っている限り、それに対してできることが 2 つあります:

    を。attr_readonlyと一緒に使えますattr_accessible。Devise への扉は開きますが、他のフォームへの扉は開きません。作成中にのみ属性を一括割り当て可能にするをお読みください。

    b. def mass_assignment_authorizer動的な属性アクセス可能リストを定義できます。 http://railscasts.com/episodes/237-dynamic-attr-accessible?view=asciicastを参照してください。私見、この方法はこの種の問題にはやり過ぎです。

于 2012-09-18T07:58:19.803 に答える