Ruby on Rails에서 로그인 기능을 구현해주는 gem이 있다.
바로 Devise! 존재 자체가 고맙다.
우선, 컨트롤러가 하나라도 있다고 가정하겠다.
없으면 rails g controller home index로 home controller를 설정한다.
gem '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
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 //로그인 회원가입 페이지를 쉽게 생성한다.
before_action :authenticate_user!
내가 작업을 할 때에는 모든 페이지에 인증이 필요했기 때문에
엄마 컨트롤러인 Application Controller에 추가해줬다.
class ApplicationController < ActionController::Base
before_action :authenticate_user!