Rails 6에서 Devise 사용하기

ayokinya·2020년 11월 15일
0

Ruby on Rails에서 로그인 기능을 구현해주는 gem이 있다.
바로 Devise! 존재 자체가 고맙다.

Devise 사용 방법

우선, 컨트롤러가 하나라도 있다고 가정하겠다.
없으면 rails g controller home index로 home controller를 설정한다.

  1. Gemfile에 devise를 추가해준다.
gem 'devise'
  1. bundle 혹은 bundle install로 gem을 내려 받는다.
  2. 터미널에서 devise를 설치한다.
rails generate devise:install
을 실행하면 아래 문구가 뜨는데 읽어보고 추가할 건 추가하자.
Some setup you must do manually if you haven't yet:

  1. Ensure you have defined default url options in your environments files. Here
     is an example of default_url_options appropriate for a development environment
     in config/environments/development.rb:

       config.action_mailer.default_url_options = { host: 'localhost', port: 3000 }

     In production, :host should be set to the actual host of your application.

  2. Ensure you have defined root_url to *something* in your config/routes.rb.
     For example:

       root to: "home#index"

  3. Ensure you have flash messages in app/views/layouts/application.html.erb.
     For example:

       <p class="notice"><%= notice %></p>
       <p class="alert"><%= alert %></p>

  4. You can copy Devise views (for customization) to your app by running:

       rails g devise:views
  1. Devise 설정이 끝나면 Devise model을 생성한다.
    model명이 User라고 하면,
rails generate devise User

를 터미널에서 실행해 Devise User model을 만든 후,

db/migrate/XXX_devise_create_users.rb에
User에 필요한 column을 추가해준다.

ex) username과 address를 추가할 때

class DeviseCreateUsers < ActiveRecord::Migration[6.0]
  def change
    create_table :users do |t|
      ## Database authenticatable
      t.string :email,              null: false, default: ""
      t.string :encrypted_password, null: false, default: ""
      
      ...
      
      t.string :username, unique:true
      t.string :address
      
      end
      
      ...

  end
end
rails db:migrate // Devise model 설정을 저장한다.
rails g devise:views //로그인 회원가입 페이지를 쉽게 생성한다.
  1. User 인증이 필요한 컨트롤러에 다음 문구를 추가해준다.
before_action :authenticate_user!
내가 작업을 할 때에는 모든 페이지에 인증이 필요했기 때문에
엄마 컨트롤러인 Application Controller에 추가해줬다.
class ApplicationController < ActionController::Base
    before_action :authenticate_user!
  1. root 페이지에 접속하면 바로 로그인 창이 뜬다.
    sign up과 log in을 한번 해보자.

참고 자료
https://github.com/heartcombo/devise

profile
42 서울 교육생

0개의 댓글