gem(ジェム)
- gemとは、「よく使う機能」をパッケージ化したもの
- 「検索機能を作るgem」や「ハッシュ化するgem」など様々なgemが存在し、Railsにインストールすることで使用することができる
- bcrypt(ビークリプト)は「ハッシュ化するgem」
bcryptのインストール
- Railsにはインストールしたいgemを記述するGemfileというファイルが存在する
- gem 'gemの名前', 'gemのバージョン'」とすることで記述したバージョンのgemをインストールすることが可能
- バージョンを指定しない場合は、最新のgemがインストールされる
- Gemfileを編集し、ターミナルで「bundle install」というコマンドを実行すると、書かれたgemをインストールすることができる
bcryptの使い方
- has_secure_passwordメソッドが使える
- このメソッドは、passwordが存在するかどうかを自動的にチェックしてくれる(導入前にpasswordカラムがある場合は消す)
- has_secure_password メソッドはハッシュ化したパスワードを password_digest カラムに保存することになっている
- password_digestカラムにハッシュ化されたパスワードを保存するためには、今まで通りpasswordに値を代入することで、has_secure_passwordによってpasswordに代入された値がハッシュ化され、password_digestカラムに保存される
- has_secure_passwordメソッドを有効にすると、authenticateメソッドを使えるようになる
- authenticateメソッドは渡された引数をハッシュ化し、password_digestの値と一致するかどうかを判定してくれる
列の追加と削除を同時に行う
def change
add_column :users, :password_digest, :string
remove_column :users, :password, :string
end
bcryptを使った書き換え
def login
@user = User.find_by(email: params[:email], password: params[:password])
if @user
session[:user_id] = @user.id
flash[:notice] = "ログインしました"
redirect_to("/posts/index")
else
@error_message = "メールアドレスまたはパスワードが間違っています"
@email = params[:email]
@password = params[:password]
render("users/login_form")
end
end
def login
@user = User.find_by(email: params[:email])
if @user && @user.authenticate(params[:password])
session[:user_id] = @user.id
flash[:notice] = "ログインしました"
redirect_to("/posts/index")
else
@error_message = "メールアドレスまたはパスワードが間違っています"
@email = params[:email]
@password = params[:password]
render("users/login_form")
end
end