これを見てくれている方はrails触るのが初めての人が多いとおもいます。
私がわかる範囲でしたら質問答えれる様にはします。ぜひコメントお願いします。
早速ですが作っていきましょう。
devise
とは
会員登録など難しいところ簡単に作ってくれるGemです。
#アプリ作成
$ rails new アプリ名
$ cd アプリ名
railsのアプリを作成後
アプリへ移動
$ rails s
railsを起動しlocalhost:3000
へアクセスする。
railsの初期画面が表示されていたら成功です。
control + c
でseverを止めます。次は、Gemの追加します。
#Gemの追加
gem 'devise'
Gemfileに記述できたらbundle install
しましょう
$ rails g devise:install
$ rails g devise User #モデル名
ルーティングにdevise_for :users
自動生成されていることも確認しましょう。
作成されたマイグレーションファイルに名前を保存できるように変更します
def change
#省略
t.string :name
end
rails db:migrate
実行し、データベースに反映させます。
class User < ApplicationRecord
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :validatable
end
class ApplicationController < ActionController::Base
before_action :authenticate_user!, except: [:top, :about]
#topとabout以外はログインしないと表示されない様にする
before_action :configure_permitted_parameters, if: :devise_controller?
#deviseが機能する前に、configure_permitted_parametersが実行されます。
def after_sign_in_path_for(resource)
posts_path #ログイン後のページ遷移先
end
protected
def configure_permitted_parameters
devise_parameter_sanitizer.permit(:sign_up, keys: [:name, :email])
#新規登録(sign_up)の際に、name,emailのデータ操作が許可されます。
end
ターミナルで$ rails g devise:views
入力する
- 新規登録時に名前とメールアドレスとパスワードを入力してログイン可能になる。
- ログインページはメールアドレスとパスワードを入力してログインできるようになる。
簡単にレイアウト修正する。form_forが非推奨のためform_withに変更する
#レイアウトの修正
##新規登録ページ
<h2>新規登録</h2>
<%= form_with model: @user, url: user_registration_path, id: 'new_user', class: 'new_user', local: true do |f| %>
<%= render "devise/shared/error_messages", resource: resource %>
<div class="field">
<%= f.label :"名前" %><br />
<%= f.text_field :name, autofocus: true %>
</div>
<div class="field">
<%= f.label :"メールアドレス(@は必要です)" %><br />
<%= f.email_field :email, autofocus: true, autocomplete: "email" %>
</div>
<div class="field">
<%= f.label :"パスワード" %>
<% if @minimum_password_length %>
<em>(<%= @minimum_password_length %> 文字以上)</em>
<% end %><br />
<%= f.password_field :password, autocomplete: "new-password" %>
</div>
<div class="field">
<%= f.label :"確認用パスワード" %><br />
<%= f.password_field :password_confirmation, autocomplete: "new-password" %>
</div>
<div class="actions">
<%= f.submit "登録" %>
</div>
<% end %>
##ログインページ
<h2>ログイン</h2>
<%= form_with model: @user, url: user_session_path, local: true do |f| %>
<%= render "devise/shared/error_messages", resource: resource %>
<div class="fiel">
<%= f.label :"メールアドレス(@必要です)" %><br />
<%= f.email_field :email, autofocus: true, autocomplete: "email" %>
</div>
<div class="field">
<%= f.label :"パスワード" %><br />
<%= f.password_field :password, autocomplete: "current-password" %>
</div>
<% if devise_mapping.rememberable? %>
<div class="field">
<%= f.check_box :remember_me %>
<%= f.label :remember_me %>
</div>
<% end %>
<div class="actions">
<%= f.submit "ログイン" %>
</div>
<% end %>
<%= render "devise/shared/links" %>
#ログインアウト機能
<ul>
<% if user_signed_in? %>
<li><%= link_to 'ログアウト', destroy_user_session_path, method: :delete %></li>
<% else %>
<li><%= link_to '新規登録', new_user_registration_path %></li>
<li><%= link_to 'ログイン', new_user_session_path %></li>
<% end %>
</ul>
<% if user_signed_in? %>
について
- ユーザーがログインしていたらログアウトを表示する
- ユーザーがログインしていなかったら新規登録、ログインを表示する
実際にrails s
で確認し、出来ていた完了になります。お疲れ様でした。