일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 장고
- Ruby On Rails
- rails review
- 웹 프론트엔드
- nodejs api
- 웹 프로그래밍 입문
- 루비 온 레일즈
- jquery
- express-mysql-session
- 레일즈
- 예스인테리어
- 홈페이지 개발하기
- rails
- 프론트엔드
- 모닝버드
- 웹 프로그래밍
- django 공부하기
- 꿀팁
- node.js
- 루비
- Django
- 웹프로그래밍
- nodejs
- Python
- 파이썬 웹 프레임워크
- 장고 공부하기
- 루비온레일즈
- 데스크탑애플리케이션
- 모듈화
- css3
- Today
- Total
노래하듯 이야기하고, 춤추듯 정복하라.
[Ruby On Rails] Devise 젬을 사용한 Email 인증 본문
인사글
안녕하세요. 멋쟁이사자처럼 6기를 수료하고, 현재 스타트업에 근무하고 있는 25살 모닝버드 입니다 ^^
요즘 레일즈르 서비스를 개발중이라 정신이 없어서.. 오랜만에 포스팅을 하는데요..!
개발과정에 있어서 새롭게 배워나가는 부분을 중심으로 규칙적인 포스팅을 다시 시작하려 합니다.
오늘은 레일즈의 Devise 젬을 사용한 이메일 인증을 구현 해 보겠습니다.
이메일 인증
# 사전 세팅
본 포스트에서의 이메일 인증 구현은, 사전에 Devise 젬 설치 및 세팅(간단한 Post 모델 생성: Scaffold)이 되어 있는 것으로 가정한다.
- devise 설치 및 User 모델 생성: https://github.com/plataformatec/devise/
- Post 모델 생성: rails g model post title:string body:text
# 참고 자료(링크)
- https://blog.naver.com/kbs4674/221068186479
# /db/migrat/(날짜)_devise_create_user.rb 수정
1. 줄 24~33, 40~41 주석 해제
# frozen_string_literal: true
class DeviseCreateUsers < ActiveRecord::Migration[5.0]
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
2. DB 적용
- $ rails db:drop
- $ rails db:migrate
# app/models/user.rb 수정
3번째 줄과 같이, 맨 끝에 :confirmable을 추가한다.
class User < ApplicationRecord
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :validatable, :confirmable
end
# config/environments/development.rb 수정
- 주의사항: 포트번호 587 유지, 추 후 구글 정책에 따라 변경될 수 있음
- user_name: 인증 메일을 보낼 구글 이메일(회사 or 개인)
- password: 구글 이메일 비밀번호
* 환경 세팅(environments)이 완료 되면 항상 서버 재부팅 해줄 것. Ctrl+c -> $ rails s
# for email verification
config.action_mailer.delivery_method = :smtp
config.action_mailer.perform_deliveries = true
config.action_mailer.default_url_options = { host: 'http://localhost:3000/', port: 3000 }
ActionMailer::Base.smtp_settings = {
:address => 'smtp.gmail.com',
:domain => 'mail.google.com',
:port => 587,
:user_name => "hyeok0902e@gmail.com",
:password => "Newlife4829!",
:authentication => 'login',
:enable_starttls_auto => true,
}
- 아래쪽 코드 변경: false -> true
config.action_mailer.raise_delivery_errors = true
# 구글계정 Access 허용 및 보안수준 앱 접근에 대해 허용하기
- 구글 Access 허용 : https://myaccount.google.com/u/0/lesssecureapps?pageId=none
- 보안수준앱 접근 허용 : https://accounts.google.com/DisplayUnlockCaptcha
★ 페이스북 인증 시 Email Confirmation 스킵하기
- 참고자료: https://stackoverflow.com/questions/7489914/skipping-email-confirmation-for-omniauth-users-using-devise
- /app/models/user.rb -> user.save! 전에 아래 코드 추가하기
user.skip_confirmation!
★ (Local)회원가입 후 Redirect 페이지 만들기
1. registration 컨트롤러에서 protected action 넣기
- Email Confirmation 메일의 확인을 요청하는 메세지 넣기
- /app/controllers/users/registrations_controller.rb
-> create 액션 주석 해제 후-> redirect_to 세팅하기
* 참고자료: https://github.com/plataformatec/devise/wiki/How-To:-Redirect-to-a-specific-page-on-successful-sign-up-(registration)
def after_inactive_sign_up_path_for(resource)
'/home/please_confirm'
end
2. routes.rb 에서 devise 관련 부분 수정하기
devise_for :users, :controllers => {
registrations: 'users/registrations' # for eamil confirmation +a
}
2. home 컨트롤러에서 페이지 생성
- /views/home/please_confirm.html.erb
< Contact: 레일즈 서비스 개발 및 스타트업 관련 문의 >
- Email: hyeok0902e@gmail.com
'프로그래밍 > Ruby & Rails' 카테고리의 다른 글
[Ruby On Rails] 레일즈 앱에 검색기능 구현하기 (0) | 2019.01.29 |
---|---|
[Ruby On Rails] 소셜 SNS 인증 _Naver (1) | 2019.01.25 |
[Ruby On Rails] Mac OS - rmagick Gem 설치 시, 서버 세팅 (0) | 2018.12.20 |
[Ruby On Rails] Rails에 MySQL 연동하기 (0) | 2018.11.17 |
[Ruby & Rails] Faker젬을 사용해 더미데이터 입력하기 (0) | 2018.08.17 |