devise 젬
노트
사용자 인증과 권한 설정에 대해서는 Devise젬 파헤치기
온라인 책을 참고하면 도움이 된다.
devise
젬은 사용자의 인증 서비스를 쉽게 구현할 수 있도록 도와준다.
처음부터 작업을 따라 해온 경우라면 이미 Gemfile
파일에 아래와 같이 젬을 추가한 후 번들 인스톨한 상태다.
우선 아래와 같이 devise
젬을 셋업한다.
===============================================================================
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. If you are deploying on Heroku with Rails 3.2 only, you may want to set:
config.assets.initialize_on_precompile = false
On config/application.rb forcing your application to not access the DB
or load models when precompiling your assets.
5. You can copy Devise views (for customization) to your app by running:
rails g devise:views
===============================================================================
실행 결과 안내문에서 5가지의 추가조치 사항을 알려주는데, 이중에서 1, 2, 5번 내용을 반영하도록 한다.
[1번 조치사항] config/environments/development.rb
파일을 열고 아래와 같이 default_url_options
을 지정한다.
사용자 가입 후 확인 이메일을 발송하게 될 것이기 때문에 실제로 이메일이 발송되도록 액션 메일러를 준비할 필요가 있다. 이에 대한 자세한 내용은 레일스 가이드의 Action Mailer Configuration
을 참고하기 바란다.
그러나, 개발시에는 이메일을 실제로 보내는 것 보다는 브라우저에서 발송된 이메일을 확인할 수 있으면 편리할 것이다.
이런 맥락에서 letter_opener
젬을 이용할 수 있으며 이에 대해서는 다음 장에서 설명한다.
주의
production
환경(production.rb
)에서는 애플리케이션의 실제 호스트의 이름으로 :host
를 변경해 주어야 한다.
[2번 조치사항] home
컨트롤러 및 index
액션을 추가해 주어야 하며 아래와 같이 실행한 후,
config/routes.rb
파일에 root
를 지정한다.
사실 home
컨트롤러는 나중에 필요없게 된다. 블로그의 루트는 결국 posts#index
액션으로 지정할 것이기 때문이다. 따라서 이부분은 생략할 수 있다.
[3번 조치사항] flash
메시지를 애플리케이션 레이아웃 파일에 추가하기 위해서 app/views/layouts/application.html.erb
파일을 열고 <body></body>
태그 사이에 아래와 같이 임시로 작성해 둔다. 이것은 나중에 다시 구체적으로 작업을 할 예정이다.
[4번 조치사항] 4번째 조치사항은 레일스 3.2 프로젝트를 허로쿠에 배포할 경우에만 국한 된 사항이므로 여기서는 적용을 하지 않을 것이다. 그러나, 필요한 상황에서는 config/application.rb
파일을 열고 아래와 같이 옵션을 추가한다.
[5번 조치사항] 5번 조치사항은 devise
에서 제공해는 다양한 폼을 개발자의 의도에 맞게 수정하기 위해서 app/views/
디렉토리에 devise
라는 하위디렉토리를 생성하고 관련 폼 뷰 템플릿 파일들을 생성한다.
이상으로 devise
젬을 설치한 후 필요한 조치에 대해서 설명을 했다.
이제 devise
제너레이터를 이용하여 User
모델 리소스를 생성한다.
마이그레이션 전에 한가지 추가 작업을 해야 한다. 이 프로젝트에서는 사용자 등록시에 확인용 이메일을 발송하여 해당 사용자가 받은 이메일의 내용 중에 본인 인증을 위한 링크를 클릭하므로써 절차를 마무리하는 로직을 구현하고자한다.
이를 위해서 app/models/user.rb
파일을 열고 아래와 같이 코멘트 처리되어 있는 :confirmable
을 devise
메소드의 인수로 추가해 준다.
그리고 db/migrate/20140609040948_devise_create_users.rb
파일을 열고 ##Confirmable
아래 4개의 코드라인과 하단의 :confirmable_token
속성에 대한 add_index
메소드 코드라인의 코멘트 문자를 제거한다.
이제 마이그레이션 작업을 한다. 먼저 데이터베이스를 생성해 주어야 한다.
주의
sqlite
를 사용할 경우에는 이 과정이 필요 없다. 로컬 데이터베이스이기 때문에 별도의 데이터베이스 생성 과정이 필요없다.
그리고 db:migrate
작업을 실행한다.
이제 애플리케이션내의 모든 컨트롤러와 뷰 파일에서 아래의 헬퍼 메소드를 사용할 수 있게 된다.
authenticate_user!
current_user
user_signed_in?
user_session
지금까지 작업한 내용을 로컬 저장소로 커밋한다.
소스보기 https://github.com/luciuschoi/foundblog_app/tree/제02장5절
References: