
Rails-Deviseでログイン機能の設置
Deviseを導入する!新規登録、ログイン、ログアウト、パスワードなどの機能!
app / Gemfile
gem 'devise'
ターミナル
$ bundle
ターミナル
rails g devise:install
app / config / development.rb
config.action_mailer.default_url_options = { host: 'localhost', port: 3000 }
ターミナル
rails g devise:views
ターミナル
rails g devise User
app / views / layouts / _navbar.html.erb
<!-- bootstrapからコピペ -->
<nav class="navbar navbar-expand-lg bg-light">
<div class="container-fluid">
<a class="navbar-brand" href="/">Navbar</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarSupportedContent">
<ul class="navbar-nav me-auto mb-2 mb-lg-0">
<li class="nav-item">
<a class="nav-link" href="#">Link</a>
</li>
</ul>
<ul class="navbar-nav">
<% if current_user %>
<li class="nav-item"> <%= link_to "Edit Account", edit_user_registration_path, class: "nav-link" %></li>
<li class="nav-item"> <%= button_to "Sign Out", destroy_user_session_path, method: :delete, class: "btn btn-small btn-primary mx-2" %></li>
<% else %>
<li class="nav-item"> <%= link_to "Sign Up", new_user_registration_path, class: "nav-link" %></li>
<li class="nav-item"> <%= link_to "Sign In", new_user_session_path, class: "nav-link" %></li>
<% end %>
</ul>
</div>
</div>
</nav>
app / views / layouts / application.html.erb
<body>
<!-- ここから追記 -->
<%= render 'layouts/navbar' %>
<% if flash[:notice] %>
<div class="alert alert-success alert-dismissible fade show mb-0" role="alert">
<%= flash[:notice] %>
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
</div>
<% end %>
<% if flash[:alert] %>
<div class="alert alert-warning alert-dismissible fade show mb-0" role="alert">
<%= flash[:alert] %>
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
</div>
<% end %>
<div class="container-fluid">
<%= yield %>
</div>
<!-- ここまで -->
</body>
</html>
app / config / initializers / devise.rb
# frozen_string_literal: true
#ここから追記
class TurboFailureApp < Devise::FailureApp
def respond
if request_format == :turbo_stream
redirect
else
super
end
end
def skip_format?
%w[html turbo_stream */*].include? request_format.to_s
end
end
# config.params_authenticatable = true
#ここから追記
config.navigational_formats = ['*/*', :html, :turbo_stream]
# manager.default_strategies(scope: :user).unshift :some_external_strategy
# end
#ここから追記
config.warden do |manager|
manager.failure_app = TurboFailureApp
end
ターミナル
$ rails s #サーバーで確認
これで新規登録、ログイン、ログアウト、パスワード機能が出来ました!
さらにPlus!新規登録に名前を追加
app / controllers / application_controller.rb
class ApplicationController < ActionController::Base
#ここから追加
before_action :configure_permitted_parameters, if: :devise_controller?
private
def configure_permitted_parameters
devise_parameter_sanitizer.permit(:sign_up, keys: [:username])
end
#ここまで
end
これで保存してターミナルでrails sでサーバーを立ち上げれば新規登録の所に名前が追加されます!試しに新規登録やログインしてみてね〜
少しでも参考になれば幸いです!ではでは〜