ユーザ登録機能の作成##
Model作成####
$ rails g model User name email password_digest
-
password_digest
=> パスワードを暗号化
class User < ApplicationRecord
has_secure_password
end
(app/model/user.rb)
-
has_secure_password
=> 有効にする - バリデーション追加
gem 'bcrypt','~>3.1.7'
(Gemfile)
-
bcrypt
インストール(コメントアウト外す)
$ bundle install
ルーティング設定####
resources :users, only: [:index, :show, :new, :create]
-
only
で必要なアクションを指定
Controller作成####
rails g controller users index show new create
index show new create
を指定するとこで必要なControllerとViewファイルを自動生成
ユーザ登録ページ作成####
Controller
def new
@user = User.new
end
View
<%= form_with(model: @user, local: true) do |f| %>
<%= f.label :name, "名前" %>
<%= f.text_field :name, class: "form-control" %>
- その他のカラムも同様に作成する
ログイン機能の作成##
ルーティング設定####
get "login", to: "sessions#new"
post "login", to: "sessions#create"
delete "logout", to: "sessions#destroy"
Controller作成####
$ rails g controller sessions new create destroy
def new
end
def create
email = [:session][:email].downcase
password = [:session][:password]
if login(emial, password)
flash[:success] = ""
redirect_to root_path
else
flash.now[:danger] = ""
render "new"
end
def destroy
end
-
params[:session][:email].downcase
でフォームデータを取得できる -
loginメソッド
=> trueかfalseを返す
private
def login(email, password)
@user = User.find_by(email: email)
if @user && @user.authenticate(password)
session[:user_id] = @user.id
return true
else
return false
end
end
-
入力フォームと同じ
email
を持つユーザを検索し@user
に代入する。見つからなければnil
を代入する。 -
ユーザの情報があり、そのユーザの持つパスワードと入力パスワードが一致した場合
true
扱い
ログインView作成####
<%= form_with(url: login_path, scope: :session, local: true) do |f| %>
<%= f.label :email, "email" %>
<%= f.email_field :email, class: "form-control" %>
<% end %>
- Modelがない場合、
url:
を使う -
scope: :session
=> フォームデータが:sessionに入る