2013年1月30日水曜日

Railsのdeviseを使ってみる ~自動生成された標準の画面を調べよう7~

とういわけで前回からの残り部分『deviseを自分ちのアプリで(さしあたり)使うにはどうするか』について書きます。

こういうときはどういう使い方をしたいかをとりあえずあげるのがいいのであげます。
以下のカンジ。

  • ログイン前にルートページにアクセスすると自動的にログインページにいく
  • ログイン前はユーザ登録ができる
  • ユーザ登録完了後は[ログインしたものとする, ログインページに行く]のどちらかがいい
  • ログアウトをするとログインページに行く
これだとすると以下の設定でなんとかなるはず。
  1. ルートページをログイン後の初期画面(ポータルとかトップメニューページ等)とする
  2. ルートページにアクセスした際に未ログインであればログイン画面に飛ばすことにする
  3. ログイン画面にログアウトリンクを配置する
1. に関してはroutes.rbの:root_to で設定すればいいので省略。
2. に関してはJavaで言うところのログインチェックフィルター的なもので実現すればいい。
で調べてみたところ、『コントローラの実行前フィルターに認証フィルターを追加すればよい』、らしい。
日本語で書くとわかりにくいが用は認証チェックを行いたい画面のコントローラに

before_filter :authenticate_user userはモデル名

とすればいいらしい。
#認証フィルターの中身やfilterの機構そのものは今度調べてみたい。


今回は試験的に portalというコントローラ&画面のセットを作成してみた&ウチの認証用のモデルがdevise_userであるので
class PortalController < ApplicationController
  before_filter :authenticate_devise_user!

  #portalの初期表示用アクション
  def index
  end
  
  #普通はコレ以外にもデータ操作などの色々なアクションがある
end
のようにした。

3. についてはググったらすぐ出てきた。
ログアウトリンクを表示する部分で。
<%= link_to 'ログアウト', destroy_devise_user_session_path, method: :delete  %>
とすればいい。(うちはモデル名がdevise_userなので↑のようなヘルパーメソッド名になっている)

なので、今回であればポータル画面に↑のリンクを追加すれば良い。

コレmethod名がdeleteになっているのがポイント。
確かにルーティングを見ると

となっているので、DELETEメソッドじゃないと受付無いようになっている。

ちなみに↑の用にリンクを作っても何故かGETメソッドで飛ばしてしまうという事象にそうぐう*1 した人もいたもよう。
#railsとかdeviseのバージョンが関係しているのかな、とか思った。
#リンク生成ならrailsのバージョンによる影響な気もするが。。。

以上でやりたかったことはできたのでまとめると。

【もともとのねらい】

  • deviseの自動生成された画面及び処理を(そこそこ)理解する
  • (あんまり手をかけず≒自動生成されたものを活かして)自分ちのアプリに組み込む


【具体的にどういう仕様にするか】

  • ログイン前にルートページにアクセスすると自動的にログインページにいく
  • ログイン前はユーザ登録ができる
  • ユーザ登録完了後は[ログインしたものとする, ログインページに行く]のどちらかがいい
  • ログアウトをするとログインページに行く

【上記仕様を実現するために何をすればいいか】

  • ルートページをログイン後の初期画面(ポータルとかトップメニューページ等)とする:configのroutes.rbで root :to => "portal#index" を記載する。(無論publicのindex.htmlは削除する)
  • ルートページにアクセスした際に未ログインであればログイン画面に飛ばすことにする:ログインチェックをかけたい画面のコントローラに before_filter :authenticate_devise_user! を追加する。(devise_userは認証用のモデル名なのでモデル名を変えたらそれに合わせる)
  • ログイン画面にログアウトリンクを配置する:認証後の画面に < %= link_to 'ログアウト', destroy_devise_user_session_path, method: :delete  >  を記載する

ということであったらしい。
というわけで長かったdeviseの話も今回で一段落とします。
次回deviseが登場するのは中級編でしょう。そこでは以下のようなことをやるつもりです。

  • ユーザ登録データ制約のカスタマイズ(パスワード文字数は256文字以上じゃないとダメ!とか)
  • 自動生成された画面をカスタマイズする(見栄えを替えるとか自作するとか)
  • 各アクション後の遷移先ページをカスタマイズする(ログアウト後はログイン画面じゃなくてyahooに飛ばしたいんだ! とか)
  • 他のdeviseの機能について(飛ばしたconfirmとか)

一旦以上。


1:『そうぐう』という単語を見るたびにドラえもんの『未知とのそうぐう機』を思い出してしまう。使うとUFOが飛んできて未知との遭遇が体験できるというとんでもない道具だった。

5 件のコメント:

  1. このコメントは投稿者によって削除されました。

    返信削除
  2. このコメントは投稿者によって削除されました。

    返信削除
  3. devise終わったら、管理者用ツールのactive_adminとかやると良いよ。

    返信削除
  4. エコエンジニアさんありがとうございます。
    さっそくactive_adminについて調べてみます。

    返信削除