問題タブ [bcrypt-ruby]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
mysql - BCrypt による MYSQL パスワード暗号化
カスタム シェル スクリプトを使用して WordPress サイトを作成するプロセスを自動化しています。WordPress の BCrypt で MYSQL パスワードを暗号化することは可能ですか? もしそうなら、これにアプローチする最良の方法は何ですか?
スニペット:
Ruby では、次のように暗号化できます。
ruby-on-rails - has_secure_password 実装後のエラー メッセージ
Rails で正常に動作するテストをいくつか開発しました。それから私は追加しました:
- モデル ファイル内: has_secure_password
- Gem ファイル: gem 'bcrypt', '3.1.7' (バンドルのインストール後、Gemfile.lock に表示されます)
- password_digest を文字列として移行ファイルに追加しました(移行後、実際に schema.rb に表示されます)
そして、テスト ファイルの setup に password と password_confirmation を追加しました。
実行するrake test
と、次のようなエラーが表示されます。
NoMethodError: undefined method 'password_digest=' for #<User:0x00000002f9c020> test/models/user_test.rb:6:in 'setup'.
行 6 は、行 @user = User.new ... を参照しています。
したがって、gem と追加の列が正しく実装されているように見えますが、このエラー メッセージが表示されます。何が原因か考えられる人はいますか?
ruby-on-rails - Rails 4 - 現在のパスワードが正しい場合にのみパスワードの変更を許可する
私のアプリでは、ユーザーは自分のプロフィール情報を編集できます。プロファイルの編集フォームで、ユーザーはすべてのフィールド (名前、役職など) を変更できます。current_password
この同じフォームには、 、password
、およびの 3 つのフィールドがありpassword_confirmation
ます。bcrypt
のhas_secure_password
パスワード認証機能を利用しています。私はまったくDeviseを使用していません。
ユーザーが正しい現在のパスワードを提供した場合にのみパスワードを変更できるようにしたい。update
Usersコントローラーのメソッドで次のコードを使用して、これを以前に機能させました。
ただし、このアプローチの問題は、現在のパスワードだけが正しくない場合に、ユーザー モデルへのすべての変更が破棄されることです。現在のパスワードが正しくない場合、すべての変更をユーザー モデルに保存したいのですが、パスワードの変更は保存したくありません。次のように IF ステートメントを分割しようとしました。
現在のパスワードが正しくなくても、ユーザーは自分のパスワードを変更できるため、これは機能しません。コードをステップ実行すると、「現在のパスワードが正しくありません。」にエラーが追加され@user
、メソッドを実行した後、update_attributes
このエラー メッセージは無視されるようです。
ちなみに、current_password
フィールドは User モデルの仮想属性です。
私はこれを数時間理解しようとして立ち往生しているので、本当に助けを借りることができます.
ありがとう!
解決
papirtigerのおかげで、これが機能しました。彼の答えからコードを少し変更しました。以下は私のコードです。どちらのコード スニペットでも問題なく機能することに注意してください。
User モデル (user.rb) 内
そして、Users コントローラーのコードは単純になりました。
forms - ユーザーのパスワードと電子メールを別々のフォームで同じビューで更新する
私の目標は、(ログインしている) ユーザーが、ページから移動せずに、電子メールまたはパスワードを (別々のフォームで、両方を同時にではなく) 更新することを選択できるプロファイル ページを作成することです。
メールの更新は、新しいメール アドレスを入力して [変更を保存] 送信ボタンをクリックするだけで簡単に行えます。
パスワードを更新するには、ユーザーは古いパスワード、新しいパスワード、および新しいパスワードの確認を入力し、[パスワードの更新] ボタンを押す必要があります。問題は update_pwd メソッドにあるはずです。
users_controller.rb
edit.html.erb
ルート.rb
これで、電子メールの更新を希望どおりに機能させることができました (必要なエラー メッセージ/検証などを使用)。ただし、パスワードの更新ボタンをクリックすると、ビューがレンダリングされますが、何も起こりません。代わりに、 update_email 関数が呼び出されているように見えます。
user.rb
application_controller.rb