BNBのプログラミング勉強記録

ガチのプログラミング初心者が駆け上がっていくブログ

メモ(Rails XI)

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