Ruby on Rails에서 로그인 만들기

Rails 앱에 대한 간단한 로그인을 원하십니까? 이 튜토리얼에서 다루겠습니다.

특정 페이지에 액세스하려면 사용자가 로그인해야 합니다. 이것은 간단한 로그인이며 사용자 역할 및 인증은 이 게시물에서 다루지 않습니다.

먼저 사용자가 로그인해야 하는 웹 사이트를 시연하는 간단한 페이지를 만듭니다.

페이지 만들기



관리자와 홈의 두 페이지를 만들겠습니다.
admin.html.erb에서 home.html.erbapp/views/pages/ 보기를 생성합니다.

    // app/views/pages/admin.html.erb

   <h1>Admin Home</h1>
   <p>app/views/pages/admin.html.erb</p>



    // app/views/pages/home.html.erb

   <h1>Home</h1>
   <p>app/views/pages/home.html.erb</p>


이제 app/controllers/에서 이러한 페이지에 대한 컨트롤러를 만듭니다.

  # app/controllers/pages_controller.rb

  class PagesController < ApplicationController
    def home
    end

    def admin
    end
  end


마지막으로 이러한 페이지에 대한 경로를 만듭니다.

  # config/routes.rb

  get "/admin" => "pages#admin", as: "admin"

  root "pages#home"


페이지는 localhost를 확인하여 작동해야 합니다. localhost:3000에 대한 페이지는 app/views/pages/home.html.erb이어야 하고 localhost:3000/adminapp/views/pages/admin.html.erb입니다.

로그인 만들기



이제 페이지가 완료되었으므로 로그인 시스템 구현을 시작합니다. devise gem을 사용하겠습니다. 간단한 로그인에 필요한 모든 것이 있습니다.

  • 다음을 Gemfile에 추가하여 devise gem을 설치합니다.

    gem 'devise'
    

    그런 다음 번들 설치를 실행합니다.

  • 터미널에서 이것을 실행하는 장치에 필요한 파일을 생성하십시오.

    $ rails generate devise:install
    

    If you're using rails 7 you may encounter an error. You may need to paste this code in your config/initializers/devise.rb:


    config.navigational_formats = ['*/*', :html, :turbo_stream]


    source



  • 사용할 마이그레이션 파일을 만듭니다.

    $ rails generate devise MODEL
    
    MODEL를 응용 프로그램 사용자에 사용되는 클래스 이름으로 바꿉니다(주로 User를 사용하지만 Admin일 수도 있음).

    그런 다음 rails db:migrate를 실행합니다.

  • 관리자 페이지를 방문할 때 사용자가 로그인하도록 요구합니다.
    app/controllers/pages를 업데이트하면 됩니다.

    class PagesController < ApplicationController
     before_action :authenticate_user!, only: :admin
    
     def home
     end
    
     def admin
     end
    end
    
    before_action :authenticate_user!는 사용자가 로그인했는지 확인합니다. 모델에 따라 authenticate_MODEL! 로 변경해야 할 수도 있습니다. 예를 들어 장치 모델의 이름을 Admin로 선택한 경우 authenticate_admin! 이어야 합니다.
    only: :admin를 추가하면 관리자 작업(app/views/pages/admin.html.erb)에서만 작업이 수행됩니다.

  • 그렇게 해야 합니다! 서버를 다시 시작하고 확인하십시오!

    링크 추가(선택 사항)



    여기에 웹 사이트에 대한 로그인 및 로그아웃 링크를 추가하겠습니다.
  • _user_detail.html.erb에서 파일app/views/shared/을 생성합니다.

    // app/views/shared/_user_detail.html.erb
    <% if user_signed_in? %>
     <%= button_to("Log Out", destroy_user_session_path, method: :delete) %>
    <% else %>
     <%= link_to 'Log in', new_user_session_path %>
    <% end %>
    

    If you're using rails 7 logout button may not work properly you need to use this:
    <%= button_to("Log Out", LOGOUT_PATH, method: :delete) %>



    여기서 경로는 로그인 및 로그아웃입니다. rails routes를 실행하여 확인할 수 있습니다.
    user_signed_in?는 고안의 도우미입니다. 사용자가 로그인했는지 여부에 따라 true 또는 false를 반환합니다. 이것은 devise 모델에 대해 선택한 이름에 따라 변경될 수 있습니다. Admin를 선택한 경우 admin_signed_in?이어야 합니다.
  • app/views/pages/home.html.erbapp/views/pages/admin.html.erb에 링크를 추가합니다.

    <%= render "shared/user_detail"%>
    


  • 참조:
  • https://stackoverflow.com/questions/36646226/undefined-method-user-url-for-devise-sessionscontrollercreate

  • https://github.com/heartcombo/devise

  • 내 저장소here를 확인할 수 있습니다.

    다시 게시하지 마십시오

    좋은 웹페이지 즐겨찾기