Ruby on RailsでDeviseを使う際の手順

Ruby on RailsプロジェクトにDeviseを導入する際の手順をまとめておく。

 

導入しようと思って、意外にハマった。

今思えば、こんなのにハマらんじゃろと思うようなことでもハマってしまっていたが、初めてのことが多いとわけがわからなくなるものだ。

 

初めてDeviseを導入しようとしている人は、是非一度、今回紹介する手順通りに進め、動作すること、最低限必要な流れを確認してほしい。

そうすることで、ハマっちゃっていらない調査に時間が掛かったということも無くなると思う。

 

環境

今回の私の環境は次の通り。

今後も基本的な手順は変わらないはずだが、将来的にバージョンが離れすぎると、今回まとめた手順では通用しなくなる可能性があるので注意。

この記事の構成

実際にRailsアプリケーションを作って、そこにDeviseを導入して、動作するサンプルアプリケーションを作成していくという構成になっている。

読者の方には、実際に手を動かして、Deviseが問題無く動作することを確認してほしい。

 

Railsアプリケーションを作成

>rails new sample_devise
>cd sample_devise

 

Deviseのgemをインストール

RailsプロジェクトのGemfileにDeviseのgemを追加。

 

Gemfileのgemをインストール

>bundle install

 

ActionMailerの設定

Deviseは、ユーザがパスワードを忘れた時などに、ユーザにメールを送信する機能がある。

メール送信時にはActionMailerの機能を使用するため、ActionMailerの設定が必要。

 

(smtp以外のメール送信プロトコルを使用する場合などは適時変更して下さい)

(development.rb, test.rb, production.rbに設定を記述することで、テスト環境と本番環境で別のメール送信設定をすることができる。)

 

ActionMailerの設定についての詳細はActionMailer::Baseを参照。

 

Deviseの使用準備

Deviseの設定ファイルを作成

>rails generate devise:install

 

Deviseで管理するログインユーザ情報のモデルを作成

>rails generate devise user

Deviseによるログインによる閲覧制限

Controllerを作成する

何でもいいのでサンプル的にControllerを作成する。

>rails generate scaffold posts title contributer body
>rake db:migrate

 

postsコントローラをログイン制にする

Controller::Baseのbefore_filterでauthenticate_user!メソッドを指定すると、そのコントローラはDeviseのログイン監視が適用されるようになる。

 

動作確認

Railsアプリケーションを起動

>rails s

 

http://localhost:3000/posts

にアクセスを試みると、まだログインしていないため

http://localhost:3000/users/sign_in

に飛ばされる。

Deviseログインページ

 

「sign_up」リンクをクリックしてユーザ登録する。

Deviseユーザ登録画面

 

ユーザ登録すると、閲覧しようとしていた

http://localhost:3000/posts

にリダイレクトされる。

(ユーザ登録直後はログイン状態になるため)

 

/postsページも閲覧することができるようになった。

Deviseログイン後

ログアウトボタンを作成

パスワード忘れのユーザさんへのメール送信機能の確認のために、一旦ログアウトしたい。

しかしログアウトするためには、HTTPメソッドをdeleteでアクセスする必要があるので、このボタンを作成する。

 

view/index.html.erbファイルにlink_toでSign out(ログアウト)ボタンを作成する。

※ログアウトボタンは本当ならテンプレートに記述するべき。

 

http://localhost:3000/posts

にアクセスするとSign outボタンが作成されている。

Devise Sign outボタン

クリックして一旦サインアウトする。

パスワード忘れのおっちょこちょいユーザへのメール送信確認

ログアウトしたら、再度

http://localhost:3000/posts

にアクセスする。

 

ログインしていない状態なので、やはり

http://localhost:3000/users/sign_in

にリダイレクトされる。

Devise ログイン画面

「Forgot your password?」リンクをクリックする。

 

パスワード忘れユーザにパスワード再設定のメールを送信するための画面で、登録してあるメールアドレスを入力して「Send me reset password instructions」をクリック

Devise パスワード忘れの画面

 

すると、パスワード再設定用のメールを受信することができる。

Deviseパスワード再設定メール

 

メールが送信されていない場合は、上述したActionMailerの設定を見直そう。

 

コメントを残す

トラックバック: http://pgnote.net/wp-trackback.php?p=1329