1. Gemfile에 Gem 추가
gem "devise"
추가된 gem 설치
bundle install
2. Devise 설치
rails g devise:install
3. User 모델 생성 (devise 기반)
rails g devise User
4. login/register view 생성 (devise 자체 view & controller "rail routes를 통해 확인 가능")
rails g devise:views
5. 컨트롤러에 유저 인증 제한 박기 (필요시 사용 가능인데.. 안 씀 ㅎㅎ..)
before_action :authenticate_user!
6. html.erb에 유저 인증 여부 제한 박기(이 부분은 devise 쓸 때만 보이는 부분이에요~)
<% if user_signed_in? %>
<div><%= current_user~~ %></div>
~~
<% else %>
~~
<% end %>
7. 회원가입 커스터마이징
rails g controller registers
config/routes.rb 회원가입에 대해서는 devise말고 따로 설정 한다고 명시(skip~~)
devise_for :users, skip: [:registrations]
devise_scope :user do
get '/users/sign_up' => 'registers#new', as: :new_user_registration
post 'users' => 'registers#create', as: :user_registration
get '/users/:id/edit' => 'registers#edit', as: :edit_user
patch '/users/:id' => 'registers#update'
end
app/controllers/registers_controller.rb 컨트롤러도 Devise::RegistrationsController 그대로 상속
class RegistersController < Devise::RegistrationsController
def new
@user = User.new()
end
def create
end
def edit
end
def update
if @user.update(user_params)
redirect_to root_path
else
render :edit_user
end
end
private
def user_params
params.require(:user).permit(:nickname, :email, :image, :phone_num)
end
end
아마 따로 함수들 명시 안해줘도 다 알아서 해줄 거에요..
대신 update할 때는 어떤 파라미터를 수정할 것인지 명시해주기 위해서 따로 작성해야 해요!!
8. 닉네임/전화번호(uniq 속성) 추가
rails g migration add_nickname_to_users nickname:string
rails g migration add_phone_to_users phone_num:string:uniq
rake db:migrate
9. 이미지 삽입을 위한 라이브러리 설치 및 migration 설치
sudo apt install imagemagick
rails active_storage:install <--- migration 파일로 저장
rails g action_text:install <--- migration 파일로 저장
rails db:migrate
config/environment/developement.rb에 추가 (배포할 땐 production.rb에 추가해야 될지도..?)
config.active_storage.variant_processor = :mini_magick
10. app/models/user.rb 모델 안에 이미지 붙이는 칼럼 생성
class User < ApplicationRecord
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :validatable
has_one_attached :image # 하나의 이미지 업로드
has_many_attached :pictures # 여러 이미지 업로드
has_rich_text :body # 글 안에 이미지 업로드
end
11. 이미지 태그 in html.erb 파일
<%= image_tag(current_user.image, style:"width:100px; height:100px") %>
12. app/views/에 registers란 폴더를 만들고 edit, new 폼(form) 생성
new.html.erb
<div>
<div>
<h3>Sign up</h3>
<div>
<div>
<% @user.errors.full_messages.each do |message| %>
<div class="form-error"> <%= message %> </div>
<% end %>
<%= form_with model: @user do |form| %>
<div>
<%= form.label :nickname %><br>
<%= form.text_field :nickname %>
</div>
<div>
<%= form.label :email %><br>
<%= form.text_field :email %>
</div>
<div>
<%= form.label :phone_num %><br>
<%= form.text_field :phone_num %>
</div>
<div>
<%= form.label :password %><br>
<%= form.password_field :password %>
</div>
<div>
<%= form.label :image %><br>
<%= form.file_field :image %>
</div>
<div>
<%= form.submit %>
</div>
<% end %>
</div>
</div>
</div>
</div>
edit.html.erb
<div>
<div>
<h3>My Page</h3>
<div>
<div>
<% @user.errors.full_messages.each do |message| %>
<div class="form-error"> <%= message %> </div>
<% end %>
<%= form_with model: @user do |form| %>
<div>
<%= form.label :nickname %><br>
<%= form.text_field :nickname %>
</div>
<div>
<%= form.label :email %><br>
<%= form.text_field :email %>
</div>
<div>
<%= form.label :phone_num %><br>
<%= form.text_field :phone_num %>
</div>
<div>
<%= form.label :image %><br>
<%= form.file_field :image %>
</div>
<div>
<%= form.submit %>
</div>
<% end %>
</div>
</div>
</div>
</div>
이 정도로 하고 rails server하면 잘 될 거에요!! 회원가입(registration)말고도 로그인도 원한다면 커스터마이징 할 수 있습니다!! 근데.. ㄹㅇ rails는 너무 high level 프레임워크인 거 같아요,, 밑에 뜯어보려면 대단한 용기가 필요한 거 같아요 ㅠㅠㅠㅠ
참고 자료
https://www.youtube.com/watch?v=1cw6qO1EYGw
https://negabaro.github.io/archive/login-register-custom
Rails devise custom 설정
negabaro.github.io
'대학생활' 카테고리의 다른 글
Firebase + Flutter - 초기 셋팅 (1) | 2023.01.30 |
---|---|
[Python] 주소 공공데이터 좌표 변환 with Google map (0) | 2023.01.28 |
[Python] gRPC server run with database (0) | 2023.01.02 |
[Docker] 도커에 관한 이야기 (0) | 2022.11.26 |
[Ruby] Linux에서 Ruby on Rails 깔아보기.. (0) | 2022.11.09 |