fc2ブログ

2023.08 «  - - - - - 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 » 2023.10
TOP > Acts as authenticated 体験記 その5【ログイン許可・不許可】

 ← Acts as authenticated 体験記 その6【まとめ】 | TOP | Acts as authenticated 体験記 その4【日本語化をしてみる】

Acts as authenticated 体験記 その5【ログイン許可・不許可】 

2007年11月25日 ()
注:今回は、こうすれば出来ますよ!と順序立てて書いたものではなく、指向を変えて、私はこのように実験しました、というまさに恥ずかしい部分まで見せる生のドキュメンタリー体験記を書きます。ですので、まどろっこしいハズ!ご了承ください。


その1【取り敢えずインストール】
その2【必要ファイルを自動生成】
その3【画面表示を見てみる】
その4【日本語化をしてみる】
その5【ログイン許可・不許可】
その6【まとめ】



今回は、ページごとに、ログインを許可したり不許可にしたりするのはどーやるの?という疑問を解決したいと思います。

ちょっくら調べてみると、やり方が 2 通り見つかりました。

1. コントローラの各アクションごとに logged_in? メソッドを使って調べる
2. コントローラごとに before_filter や skip_before_filter を使って指定する




まず、

1. コントローラの各アクションごとに logged_in? メソッドを使って調べる



これなのですが、コントローラのアクションごとに、logged_in? メソッドを使って、ユーザがログインしている時としていない時の動作を自分で書きます。

例えば、account コントローラのアクションが 3 つあったとします。action1, action2, action3 という名前にします。

action1 (http://localhost:3000/account/action1)
 は、ログインしていてもしていなくても見られるページ

action2 (http://localhost:3000/account/action2)
 は、ログインしていないと、action1 に飛ばします。ログインしていると見られます。

action3 (http://localhost:3000/account/action3)
 は、ログインしいないと見られます。ログインしていると action2 に飛ばします。

みたいなことをしたいと思ったら、以下のようになります。

app/controllers/account_controller.rb に追加

  def action1
    # ログインしていてもしていなくても見られるページ
  end

  def action2
    if not logged_in?
      # ログインしていないと、action1 に飛ばします。
      redirect_to(:controller => '/account', :action => 'action1')
    end

    # ログインしていると見られます。
  end

  def action3
    if logged_in?
      # ログインしていると action2 に飛ばします。
      redirect_to(:controller => '/account', :action => 'action2')
    end

    # ログインしいないと見られます。
  end



もちろん、対応する rhtml を新規作成するのをお忘れなく!ちなみにお節介すぎるかもですが、ファイル名は以下のようになります。
app/views/account/action1.rhtml
app/views/account/action2.rhtml
app/views/account/action3.rhtml


次に、

2. コントローラごとに before_filter や skip_before_filter を使って指定する



別のやり方ですね。before_filter や skip_before_filter に、:login_required を指定して、コントローラ全体に、一気にログイン制限を掛けたり取っ払ったりできます。

例えば、app/controllers/honyarara_controller.rb があったとして、このコントローラのアクション全てで、ログインしているときだけページが見られるようにするには、

class HonyararaController < ApplicationController

  before_filter :login_required

  def action1
  end

  def action2
  end

  def action3
  end

end



という 1 行を付け加えます。

さて、ここで、もしログインしていない状態で、この honyarara にアクセスしようとした場合(例:http://localhost:3000/honyarara/action1/) は、/account/login に飛ばされます。

というのは、lib/authenticated_system.rb ファイルの access_denied メソッドに書いてありますので、この飛び先を変えたい場合、そこを変更すれば大丈夫です。

でもって、before_filter や skip_before_filter の使用例を挙げておきますので、参考にしてください。


・このコントローラ全てのアクションでログインが必要

before_filter :login_required



・このコントローラの action1 と action2 アクションでのみログインが必要

before_filter :login_required, :only => [ :action1, :action2 ]



・このコントローラの action1 と action2 以外のアクションでログインが必要

before_filter :login_required, :except => [ :action1, :action2 ]



・このコントローラ全てのアクションでログインは必要ない

skip_before_filter :login_required




と、終了!次のエントリでは、まとめ、というかやったことの手順を書いてみて〆ることにします。

【広告】

[2007.11.25(Sun) 19:28] generator/pluginTrackback(0) | Comments(0)
↑TOPへ

 ← Acts as authenticated 体験記 その6【まとめ】 | TOP | Acts as authenticated 体験記 その4【日本語化をしてみる】

COMMENT

COMMENT POST















管理者にだけ表示

 ← Acts as authenticated 体験記 その6【まとめ】 | TOP | Acts as authenticated 体験記 その4【日本語化をしてみる】