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")
コメント