본문 바로가기

IT/RUBY

Ruby On Rails, Devise를 이용한 회원관리!

1. Devise

 

DeviseRails로 작성된 애플리케이션에 간단한 인증 기능(로그인 등)을 만들어주는 geml(라이브러리)입니다.

 

・ 또한, 메일 주소 등록을 통해 메일 인증, 유저 관리 기능도 만들어 주며, Migrate 파일을 이용하여 테이블 생성도 가능합니다.

2. Devise 설치 방법

 

Ruby의 Gemfile에 아래와 같이 등록하고 저장합니다.

 

#Gemfile

# devise
gem 'devise'

 

・ 등록하셨으면, gem을 설치하겠습니다. 터미널에서 bundle install을 입력합니다.

 

C:\daily_schedule>bundle install
Fetching gem metadata from https://rubygems.org/.............
Fetching gem metadata from https://rubygems.org/.
Bundle complete! 17 Gemfile dependencies, 82 gems now installed.
Use `bundle info [gemname]` to see where a bundled gem is installed.

 

・ bundle이 install 되었다면, Devise를 설치하기 위해 rails generate devise:install 명령어를 입력합니다.

 

C:\daily_schedule>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
...

 

삐빅 에러! 는 아니고, 몇 가지 설정을 해야 한다고 합니다. 먼저 Default URL을 설정합니다.

 

config/environments/development.rb
#위의 경로로 가서 아래의 문구를 적당히 붙여줍니다.

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

 

・ 다음으로 Root를 설정해줍니다. 당장 뭐 할게 아니니까 Devise로 리다이렉트 시켜줍니다.

 

・ 나중에는 컨트롤러로 따로 연결해주셔야 합니다~

 

#routes.rb에 devise_for 아래에 추가합니다.
root :to => redirect('/users/sign_up')

 

・ 이제 Devise를 사용하여 User라는 모델을 생성하겠습니다. (이름은 user가 아니라도 괜찮습니다!)

 

rails g devise User를 입력해보아요

 

C:\daily_schedule>rails g devise User
      invoke  active_record
      create    db/migrate/20190304121913_devise_create_users.rb
      create    app/models/user.rb
      invoke    test_unit
      create      test/models/user_test.rb
      create      test/fixtures/users.yml
      insert    app/models/user.rb
       route  devise_for :users

 

DeviseCreateUsers라는 User 테이블을 생성하는 Migration 파일생성되었습니다.

 

# frozen_string_literal: true

class DeviseCreateUsers < ActiveRecord::Migration[5.2]
  def change
    create_table :users do |t|
      ## Database authenticatable
      t.string :email,              null: false, default: ""
      t.string :encrypted_password, null: false, default: ""

      ## Recoverable
      t.string   :reset_password_token
      t.datetime :reset_password_sent_at

      ## Rememberable
      t.datetime :remember_created_at

      ## Trackable
      # t.integer  :sign_in_count, default: 0, null: false
      # t.datetime :current_sign_in_at
      # t.datetime :last_sign_in_at
      # t.string   :current_sign_in_ip
      # t.string   :last_sign_in_ip

      ## Confirmable
      # t.string   :confirmation_token
      # t.datetime :confirmed_at
      # t.datetime :confirmation_sent_at
      # t.string   :unconfirmed_email # Only if using reconfirmable

      ## Lockable
      # t.integer  :failed_attempts, default: 0, null: false # Only if lock strategy is :failed_attempts
      # t.string   :unlock_token # Only if unlock strategy is :email or :both
      # t.datetime :locked_at


      t.timestamps null: false
    end

    add_index :users, :email,                unique: true
    add_index :users, :reset_password_token, unique: true
    # add_index :users, :confirmation_token,   unique: true
    # add_index :users, :unlock_token,         unique: true
  end
end

 

・ 필요한 칼럼이 있다면, 직접 추가하시거나 삭제 할 수 있습니다.

 

・ rails db:migrate를 입력하여 데이터베이스에 반영시킵니다.

 

C:\daily_schedule>rails db:migrate

 

devise는 자동으로 루트를 추가해줍니다. 루트를 확인해보아요~

 

C:\daily_schedule>rails routes

 

자동으로 정의되어 있는 routes 정보를 볼 수 있습니다.

 

 Prefix Verb   URI Pattern                                    Controller#Action
         new_user_session GET    /users/sign_in(.:format)                               devise/sessions#new
             user_session POST   /users/sign_in(.:format)                               devise/sessions#create
     destroy_user_session DELETE /users/sign_out(.:format)                              devise/sessions#destroy
        new_user_password GET    /users/password/new(.:format)                          devise/passwords#new
       edit_user_password GET    /users/password/edit(.:format)                         devise/passwords#edit
            user_password PATCH  /users/password(.:format)                              devise/passwords#update
                          PUT    /users/password(.:format)                              devise/passwords#update
                          POST   /users/password(.:format)                              devise/passwords#create
 cancel_user_registration GET    /users/cancel(.:format)                                devise/registrations#cancel
    new_user_registration GET    /users/sign_up(.:format)                               devise/registrations#new
   edit_user_registration GET    /users/edit(.:format)                                  devise/registrations#edit
        user_registration PATCH  /users(.:format)                                       devise/registrations#update
                          PUT    /users(.:format)                                       devise/registrations#update
                          DELETE /users(.:format)                                       devise/registrations#destroy
                          POST   /users(.:format)                                       devise/registrations#create
...

 

・ 어떤 화면이 생성되었을까 궁금하시면, 서버를 켜고, localhost:3000을 입력!

 

・ Root에 리다이렉트를 설정해두었기 때문에, Sign up 화면으로 이동합니다.

 

 

 

・ 위와 같이 정~말 기본적인 틀이 잡혀 있는 것을 확인할 수 있습니다.

 

・ 하지만, 기본적으로 제공해주는 화면은 매우 간단합니다. 커스터마이징을 하고 싶다면, rails generate devise:view users 명령어를 입력하여, view 파일을 수정하시면 됩니다.

 

・ 그럼 끝!