티스토리 뷰

[Rails] Devise Gem 을 이용한 사용자 인증관리


웹 페이지를 개발할 때 사용자 회원가입, 로그인, 로그아웃, 회원탈퇴, 권한인증 등은 거의 필수요소 중 하나입니다. 이런 부분들을 세션과 쿠키를 이용하여 직접 구현할 수 도 있지만 보안, 안정성 등을 고려하면 오픈소스 라이브러리를 이용하는 것도 현명한 선택입니다.



Rails에는 오픈소스 라이브러리이인 devise gem 이 이런 기능들을 수행해줍니다. 유사 여러 라이브러리들이 있지만 devise gem 이 가장 인기가 좋습니다. 이번에는 devise gem을 이용한 사용자 인증관리를 구현해보도록 하겠습니다.


실습 개발 환경

OS: Ubuntu 14.04LTS

Rails 4.x

Ruby 2.x



우선 Gemfile 에 devise 라이브러리를 추가해줍니다.

gem 'devise'

그리고 bundle install 을 이용해 gem 을 설치해줍니다.


devise gem을 설치 후에 아래의 명령어를 통해 관련 리소스들을 생성합니다.

rails generate devise:install


그리고 사용자 회원가입, 로그인 등을 관리해주는 DB를 생성해야합니다. devise 에서 제공해주는 기능으로 손쉽게 생성할 수 있습니다.

rails generate devise MODEL

여기서 MODEL 부분은 원하지는 테이블명을 넣어주시면 됩니다. 보통 User 를 많이 사용합니다.

(ex. rails generate devise User)


그 후 migrate를 실행시켜 테이블을 생성시킵니다.

rake db:migrate


Devise gem에는 메일송신 기능도 포함되어있습니다. 예를들어 회원가입 시 메일인증을 하거나, 비밀번호 분실 시 가입할 때 입력한 메일로 비밀번호를 재설정하는 내용을 보내는 등에 쓰입니다. 그래서 메일 송신이 회신받을 host명을 입력해주셔야합니다.


개발환경에서는 보통 host명을 'localhost'라 사용하는 것이 편합니다. 해당 IP를 넣어주셔도 됩니다. config/environments/development.rb 에 해당 내용을 명시해줍니다.

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


배포환경에서는 config/environments/production.rb

에 배포서버의 IP와 포트번호를 명시해주시면 됩니다.


또한 config/routes.rb 에서 root 페이지를 명시해주셔야합니다.

root to: "home#index"

위는 예시이므로 자신의 환경에 맞게 루트 페이지를 설정해주시면 됩니다. Devise 에서 권한이 없는 사용자가 페이지 요청시 root 경로로 리다이렉션을 해주는 등에 사용합니다.


또한 routes.rb에서 devise_for :users가 추가된 것을 확인해보실 수 가 있습니다.

(위에서 모델 생성시 User로 하신분의 경우입니다. 다르게 입력하셨으면 해당 이름이 들어갑니다.)


위까지 따라하시면 로그인, 회원가입, 회원탈퇴, 로그아웃 등의 기능들이 완성됩니다.

rake routes 명령어를 통해 추가된 route들을 확인해보면 아래와 같습니다.



/users/sign_in 으로 들어가면 로그인 페이지가 뜨며 /users/sign_up 으로 들어가면 회원가입 페이지가 뜹니다. 각 페이지를 들어가서 실제로 해당 기능들이 정상적으로 수행되는지 확인해보시길 바랍니다.


위에 까지 내용들을 수행하였으면 Controller에서 Devise 가 제공하는 기능들을 이용할 수 있습니다.


컨트롤로에서 before_action으로 다음과 같이 명시해주면 로그인된 유저만 해당 컨트롤러의 기능을 수행할 수 있습니다.

before_action :authenticate_user!


또한 사용자가 로그인을 했는지 확인하고 싶으면 아래의 helper를 이용하시면 됩니다.

user_signed_in?


로그인한 사용자일 경우 true를 비로그인 유저일 경우 false 를 반환합니다.


현재 로그인 사용자의 객체를 가져오고 싶으시면 아래와 같이 사용하시면 됩니다.

current_user


현재 사용자의 session에 접근하려면 다음 helper를 사용하시면 됩니다.

user_session


만약, view 페이지들을 커스터마이징 하길 원하시면 아래의 명령어를 입력하시면 됩니다.

rails generate devise:views


그러면 아래의 그림처럼 views에 devise view 페이지들이 생성됩니다.


해당 파일에서 원하시는 대로 레이아웃 작업을 하시면 됩니다.


이외에도 컨트롤러 커스터마이징, OmiAuth 등의 다양한 기능들이 있습니다. 자세한 내용은 devise github를 참조하시면 됩니다. 


영어에 친숙하지 않으신분이라면 RoRLab의 Devise gem 파헤치기를 참고하시길 바랍니다.


댓글