Laravel3 を WebMatrix3 で開発しロリポップで公開する no.15 【auth フィルターを設定&自作フィルターの作り方】

前回までで、登録 –> ログイン –> マイページの表示 という流れまで、できるようになりました。今回はこの後に ログアウト –> ログインページ という処理を追加したいと思います。

ですがその前に、現在の mypage はログインを経由しなくても表示できる状態になっていますので、ログイン状態でなければ login へリダイレクトするようにしたいと思います。それには mypage.php コントローラに signup.php コントローラで施したようなフィルター処理を追加します。

<?php
class Mypage_Controller extends Base_Controller
{

    public function __construct()
    {
        parent::__construct();
        $this->filter(\'before\', \'auth\');
    }

    public function action_index()
    {
        Asset::add(\'narrow-css\', \'css/narrow.css\', \'main\', array(\'media\' => \'screen and (max-width: 700px)\'));
        Asset::add(\'medium-css\', \'css/medium.css\', \'main\', array(\'media\' => \'screen and (min-width: 701px)\'));
        Asset::add(\'jquery\', \'js/jquery-1.10.0.js\', \'jquery-ui\');
        return View::make(\'mypage\');
    }
}

この auth フィルターは、 no.12 で一言説明したように、あらかじめ routes.php に登録されているフィルターで、ログイン状態でなければなんと login にリダイレクトしてくれる便利なフィルターです。login でなく signin にした方は書き直してください。ついでに admin.php コントローラにもフィルターを追加してみましょう。

<?php

class Admin_Controller extends Base_Controller
{

    public function __construct()
    {
        parent::__construct();
        $this->filter(\'before\', \'admin\');
    }
    public function action_tablemake()
    {
        Schema::create(\'authentication\', function($table)
        {
          $table->increments(\'id\');
          
          $table->string(\'email\')->unique();
          $table->text(\'password\');
          
          $table->integer(\'role\');
          
          $table->boolean(\'active\');
          
          $table->timestamps();  
        });

        echo \"finish!\";
    }
}

admin フィルターを追加しました。このフィルターはもともと入っていませんので routes.php に処理を追加します。


Route::filter(\'admin\', function()
{
	if (Auth::guest()) return Response::error(\'404\');
	if (Auth::user()->role < 100) return Response::error(\'404\');
});

auth フィルターの次にでも書き足してください。未ログインまたは、ログイン中のユーザ権限が 100 未満であれば 404を返すフィルターです。

さて、routes.php に処理を追加したところで、このままログアウト処理も追加したいと思います。Laravel3 の強力な機能にルーティング自体に処理を書けるというものがあります。ログアウト用のルーティングは下記の通りです。

Route::get(\'logout\', function()
{
    Auth::logout();
    return Redirect::to(\'login\');
});

ログアウト処理後、ログインページにリダイレクトする処理を加えています。

残りに、今の今まで放置をしていましたが、インデックス画面に、サーバの内部パスが表示されていてとても危険ですので、とりあえず仮のページを置いておきたいと思います。views いかに index.blade.php を追加(内容は WebMatrix デフォルトのままで問題なし)し、 routes.php の「/」ルーティングを書き書き換えてください。

Route::get(\'/\', function()
{
	return View::make(\'index\');
});

後、このままでは管理者ユーザがいませんので、任意のユーザの role を 100 以上に昇格しておいてください。

それでは今回はここまで。

カテゴリー: Laravel3, Web, WebMatrix, ロリポップ タグ: , パーマリンク

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です