Railsアプリのパスワードを暗号化する方法〜bcryptの使い方〜




Railsアプリでパスワードを暗号化したい!

Railsアプリを作ったらやりたいのが

ユーザーパスワードの暗号化

です。

 

暗号化されていないと、データベースの中身をすればパスワードを閲覧できちゃいますから。

アプリ運営者がパスワードを確認できちゃうなんてセキュリティ的にいかんですよね。

万が一、データベース情報が漏れてしまったら、それこそアウト。個人情報流出事件として報道されかねません。

そこでパスワードを暗号化するために導入したいのが、

bcrypt

というgemです。

 

 

パスワードを暗号化できるgem「bcrypt」の使い方

次の5ステップを踏んでみてください。

 

gemを追加

パスワードの暗号化に使うgemを追加。

今回はbcryptを導入するので、Gemfileの末尾に

を追記して上書き保存。

その後、コマンドラインにて

を発動します。

これでRailsアプリにbcryptをインストールできましたね。

 

has_secure_password

次は

という1行をユーザーのモデルファイル(user.rb)に追記。

これでパスワードを暗号化できるようになりました。最終的にuser.rbは次のようになります。

has_secure_passwordをモデルファイルに記載すると、Userモデルに、

  • password
  • password_confirmation

という属性が追加され、authenticateメソッドが使えるようになります。

パスワードのバリデーションは標準装備されています。

パスワードのバリデーションを設定した方は削除しましょう。

>>さもなくばアプリに不具合が出ちゃいます

 

password_digestカラムを追加

暗号化されたパスワードはpasswordカラムではなく、

password_digest

というカラムに保存されます。

ユーザーテーブルにpassword_digestがない方はカラムを追加しましょう。

Railsのデータベースにカラムを追加するときは、

で追加できましたよね。

今回は

とします。

 

コマンド発動後、予定通りマイグレーションファイルができたら、

を発動してデータベースに反映。

すでにpasswordカラムが存在している場合は削除しておきましょう。

カラムの削除はremove_columnメソッドでしたね。

詳しくはRailsのカラム追加・削除方法を読んでみてください。

 

authenticateメソッドを追加

最後にauthenticateメソッド追加です。

@user.authenticate(引数)

とすることで、暗号化されたパスワードと一致するユーザーオブジェクトを取得できます。

 

よって、users_controller.rbのloginアクションで、

とし、これをif文の条件に設定するのです。

最終的にusers_controller.rbのloginアクションは次になりますね。

これでセンシティブなパスワード情報を暗号化して扱えるようになりました。

ご検討をお祈りします。

 

それでは!

Lin

 

【参考記事】

Pocket
LINEで送る




音生入力で楽にブログを書く技が満載!
ブログ音声入力術

音声入力の使い方から文章を書くコツまで完全網羅。ブログを書きたいすべての人向けの電子書籍




コメントを残す

メールアドレスが公開されることはありません。