TECH EXPERT 52日目

TECH::EXPERT

validationも含めて意外とuserControllerの作成が面倒だ。
知識が追いついていかない。
なんだかPGの実装過程が思ったより時間がかかる。もっと早く書けるようにならないと。

就職するかどうかは決めかねてるけど、レバッテクに登録してみた。
お祈りされちゃったよ(笑)

rails

session

paramsと違って継続して情報を保持する。
session = paramsや、
session = {name: hoge}などのハッシュを代入してもsessionとは認識されない。
session[:key] = valueとすればsessionとして機能する。

def sign_up_phone
  @user = User.new  
  user_information_params.each do |key, value|
    session[:"#{key}"] = value
  end
end

routes

registrationsをオーバーライドするには以下のように記載し、
devise/registrations -> users/registrationsへ参照先を変更する。

devise_for :users, controllers: {
 :registrations => 'users/registrations'
}

scopeを限定することで特定のアクションを追加できる。

  devise_scope :user do
    post '/users/sign_up/payment_confirmation', to: 'users/registrations#payment_confirmation'
    get '/users/sign_up/complete', to: 'devise/registrations#complete'
    get '/users/logout', to: 'devise/registrations#user_logout'
  end

resources collection, member

collectionはusers/sign_up_sns
collectionはusers/:id/sign_up_sns

resources :users, only: [:create, :show] do
  collection do
    get  :sign_up_sns
    get  :sign_up_user_info
    post :sign_up_phone
    post :sign_up_sms
    post :sign_up_shipping
  end
end

ユーザーをサインインさせる。

sign_inにインスタンスを渡すとサインインできる。
ウィザード形式のフォームの場合などに事後でサインインさせる時に使う。

sign_in User.find(session[:id]) unless user_signed_in?

bcrypt

パスワード暗号化。
以下を記載してbundle install

gem 'bcrypt'

暗号化パスワードを利用したいモデルに以下のように記述する。

class Hoge < ApplicationRecord
  has_secure_password
end

hoge.saveする際にはformでpasswordとpassword_confirmationの2つを渡せば自動的にエンコードしてくれる。エンコードされたパスワードはpassword_digestに格納される。

migrateファイルに以下カラムを足す。

t.string :password_digest

deviseでbcryptを利用する場合にはpassword_digestではなく、encrypted_passwordという名称になる。

パスワードの認証 authenticate()

引数にパスワードを渡して、インスタンスに適応すると、パスワードが一致していればtrue、違えばfalseを返す。

@hoge.authenticate("hogehoge")

コメント