2007年10月24日水曜日

今日も認証

大文字で始まるメソッドの呼び出し

Module モジュールのクラス。


−−−−−−−−−−−
■ ログイン要求/判別 

class HogeController
include AutheticatedSystem
before_filter :login_required
....
end

これだけである。
これで、HogeController配下のアクションでは全てログインが必要となる。
未ログイン状態でアクセスすると/account/loginにリダイレクトされ、
そこでログインすると元のアクションに戻ってくる。
−−−−−−−−−−−−

とのことだけど、
AccountController・SchedulesController・ApplicationControllerの
3つとも指定しましたが・・・全然ログインを求められません。
キャッシュでも残っているのかな?と思い、
キャッシュの消去もしてみましたが;;
ただ、http://localhost:3000/ や
http://localhost:3000/account/ などのアクセスがlogin画面になっているのは・・・・
/config/routes.rbの中で下記のように指定したからですね。

map.connect '', :controller => 'account', :action => 'login'
map.connect '/account/', :controller => 'account', :action => 'login'
map.connect '/schedules/', :controller => 'account', :action => 'login'

同じ内容を3行って・・・
ApplicationControllerでbefore_filterが効けば必要ないのかな?

● 継承時の Filter

>コントローラを継承している場合、親クラスのコントローラで定義された
>Filter が先に実行されます。
>また、Filter を評価した値(戻り値)が false である場合、
>その時点で Filter の適用は停止され、以降の Filter は実行されません。
>(これは継承とは無関係に Filter の特徴です)

うーなぜfilterがかからないのか
全然分からない・・・・なにがいけないんだぁ

● routes

同じ内容3行でも良さそう。
でも、認証させたいコントローラーが多くなったらどうするのだろう?

例えば
map.connect '/:controller/', :controller => 'account', :action => 'login'
など、色々当てずっぽうに入れて為してみましたが、

http://localhost:3000/schedules/ にアクセスすると

<エラー文> Unknown action
No action responded to login

となってしまいます。
たぶん、schedulesにloginなんてアクション無いぞ。と言われている。

どんな処理でエラーになっているか?

Processing SchedulesController#login
Parameters: {"action"=>"login", "controller"=>"schedules"}

ここが気になりますね。SchedulesControllerのloginにparamを
持っていってますね。やはり。

しかし、http://localhost:3000/account/ にアクセスすると・・・

Processing ApplicationController#index
Parameters: {}

login画面が表示されるし、ApplicationControllerにプロセスしてる!
んんーーーー? これは、actionメソッドが同じだからぽい。

Processing SchedulesController#month
Parameters: {"action"=>"month", "controller"=>"schedules"}

でも、ApplicationControllerにはプロセスしていない。

あー分からないので、とりあえず進んでいきます。
urlではaction名を指定すればログイン無しで入れます!

・・・・・・・

★明日-最終日-の課題★

1.スケジュール新規登録でファイル添付をしていないとエラーが出るのを直す
<エラー文> NoMethodError in SchedulesController#create
undefined method `original_filename' for "":String
app/controllers/schedules_controller.rb:102:in `set_file_name'

2.認証・・・


明日は、今までの振り返りプレゼンをして、
残り時間で上記の課題をやろうと思います。

0 件のコメント: