본문 바로가기

Wep Develop/Ruby on Rails

[Ruby on Rails] Devise Gem 이용한 회원가입기능 (기본+컬럼추가)



1. 메인 컨트롤러 생성 및 라우트 설정

rails g controller home index


config/routes.rb

1
root 'home#index'

cs



2. 디바이스 젬 설치하기

gemfile

1
gem 'devise'

cs


bundle install

rails generate devise:install

rails g devise user



3. 기본 설정하기

db/migrate/devise

1
t.string :email, unique: true  

cs

#unique 중복 피하도록


rake db:migrate


app/model/user.rb

1
2
3
4
5
6
before_save {self.email = email.downcase}                                       #이메일을 저장하기 전, 주소를 소문자로 변환
  VALID_EMAIL_REGEX = /\A([\w+\-]\.?)+@[a-z\d\-]+(\.[a-z]+)*\.[a-z]+\z/i        #정규식을 이용해 이메일 형식을 지정
  validates :name, presence: true, length: {maximum: 50}                        #이름과 이메일이 반드시 존재하고 50,255자를 넘지 않게하는 유효성검사
  validates :email, presence: true, length: {maximum: 255},                     #validates (존재를 확인), presence(오직 하나만 존재),
          format: {with: VALID_EMAIL_REGEX}, uniqueness: {case_sensitive: false}   #uniqueness(이메일소문자)
 
cs



4. 뷰파일 설정하기

rails g devise:views users


config/initializers/devise.rb

10번째줄

1
config.scoped_views = true
cs



index.html.erb

1
2
3
4
5
6
7
8
9
<if user_signed_in? %>
<%= current_user.email %>
<%= link_to "로그아웃", destroy_user_session_path, method: "DELETE" %>
<else %>
<%= link_to "로그인", new_user_session_path %>
 
<%= link_to "회원가입", new_user_registration_path %>
 
<end %>
cs


config/initializers/devise.rb

248번째 줄

1
config.sign_out_via = :get  
cs



5. 컨트롤러 생성하기


rails g devise:controllers users



6. 컬럼추가하기

rails g migration AddUserattributeToUsers username:string userage:integer usersex:string admin:boolean

# add 마이그레이션 이름 to  모델명

rake db:migrate


app/views/users/registrations/new.html.erb

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<div class="field">
  <%= f.label :이름 %> <br />
  <%= f.text_field :username, autofocus :true %>
  </div>
 
  <%= f.label :나이 %> <br />
  <%= f.text_field :userage, autofocus :true %>
  </div>
 
  <p> 성별 </p>
    <label class="radio_button">남자
      <%= f.radio_button :usersex, '남자', checked: true %>
    </label>
    <label class="radio_button">여자
      <%= f.radio_button :usersex, '여자', checked: true %>
    </label>
cs

*form_for tag 도움말

app/controllers/application_controller.rb

1
2
3
4
5
6
맨윗줄에 추가 : before_action :configure_permitted_parameters, if :devise_controller?
 
 def configure_permitted_parameters
      devise_parameter_sanitizer.permit(:sign_up, keys: [:username, :userage, :usersex, :admin])
 end
 

cs