見出し画像

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でサーバーを立ち上げれば新規登録の所に名前が追加されます!試しに新規登録やログインしてみてね〜
少しでも参考になれば幸いです!ではでは〜