LoginSignup
0
0

More than 1 year has passed since last update.

rails5 progate 整理メモ

Posted at

パスワードの安全な取り扱いを学ぼう

サービスには他人のアカウントに不正にログインされてします危険性がある。
それでは安全にするためにはどうすればいいのか?

 安全性の高いパスワード

万が一パスワードを覗き見られたり、データが盗まれても、パスワードの内容がわからない状態

どのように安全にするか? ハッシュ化

ハッシュ化された特別な文字列。このようにハッシュ化することで安全性を高めることができる

Gemfileを編集しよう

Rails でパスワードをハッシュ化する際は、gemというツールを必要。

Gemとは

RubyやRailsでプログラミングをする際に「よく使う機能」をパッケージ化したもの
Railsにインストールすることで使用することができます。
今回はbcryptという「ハッシュ化するgem」を使います。

どうやってインストールするのか?

インストールしたいgemを記述するGemfileというファイルが存在します。
つまり
Gemfileにファイル名を記述することによってインストールできるのか?

gemファイルのインストールの方法

「gem 'gemの名前'」と記述します.
その後ターミナルで「bundle install」というコマンドを実行すると、書かれたgemをインストールすることができます。

Gemfile.lock

Gemfileの下にあるGemfile.lockというファイルは自動で作成されるファイルなので編集する必要はありません。

やってみた。

gem 'bcrypt'
bundle install

成功

has_secure_password

bcryptからどうやってハッシュ化をするのか?

ハッシュ化の手順

bcryptをインストールすると、has_secure_passwordというメソッドが使えるようになります。

has_secure_passwordメソッドをかく。

user.rb
class User < ApplicationRecord
  # has_secure_passwordメソッドを追加してください
  has_secure_password
.
.
.  
end

passwordカラムのバリデーションを削除をしても問題にならない。

password_digestカラムを追加しよう

has_secure_passwordメソッドはハッシュ化したパスワードをpassword_digestカラムに保存することになっている。
安全を考慮して書かない。

一つのマイグレーションファイルに複数のカラムを設定

マイグレーションファイルを作成

rails g migrationコマンドを用いる。

passwordカラムが削除されるよう、左の図のようにマイグレーションファイルを編集しましょう。

マイグレーションファイルのカラムの削除

カラムを削除する場合は、add_columnの代わりにremove_columnを用います。

思ったこと

なんでパスワードカラムを削除してパスワードダイジェストカラムを追加する必要があるのか?
ハッシュ化したパスワードをパスワードカラムに入れろばいいじゃないか。

マイグレーションファイルを作成

rails g migration change_users_columns
change_users_columns.rb
class ChangeUsersColumns < ActiveRecord::Migration[5.0]
  def change
    add_column users :password_digest :stirng
  end
end

こうだったかな?

  class ChangeUsersColumns < ActiveRecord::Migration[5.0]
    def change
      add_column :users, :password_digest, :stirng
      remove_column :users, :password, :string
    end
  end

全てシンボルにすることと,で区切ることだったか。

tweet_app $ rails db:migrate

マイグレーションファイルを正しく編集してから実行してください。

change_users_columns.rb
add_column :users, :password_digest, :stirng
change_users_columns.rb
add_column :users, :password_digest, :string

stringの綴り間違いだった。

ちょっと休憩。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0