ITの隊長のブログ

ITの隊長のブログです。Rubyを使って仕事しています。最近も色々やっているお(^ω^ = ^ω^)

CakePHPでAuthコンポーネントを利用。ログインにユーザー名、パスワード以外に他条件を追加したい場合

スポンサードリンク

  • app/Controller/AppController.php
<?php
'Auth' => array(
	'authenticate' => array(
        'Form' => array(
            'userModel' => 'User',
            'fields' => array(
                'username' => 'user_id',
                'password' => 'password'
            ),
            'scope' => array('add_value' => 0)
        )
    ),
〜 省略 〜


こんな感じで使えばいいらしいお(^ω^ = ^ω^)


だがしかし、人は知識を追求したい生き物(多分)


この値を動的に出来ないかなと思ったわけですよ。


やってみた。


特定のIPアドレスだったら

  • app/Controller/AppController.php
<?php
'Auth' => array(
	'authenticate' => array(
        'Form' => array(
            'userModel' => 'User',
            'fields' => array(
                'username' => 'user_id',
                'password' => 'password'
            ),
            'scope' => array('ipaddress' => $_SERVER['SERVER_ADDR'])
        )
    ),
〜 省略 〜


エラーです。


メンバ変数内で動的の値はアウト


じゃあどうすれば?


試行錯誤の結果、こうしたら動きました。

  • app/Controller/AppController.php
<?php
'Auth' => array(
	'authenticate' => array(
        'Form' => array(
            'userModel' => 'User',
            'fields' => array(
                'username' => 'user_id',
                'password' => 'password'
            ),
            'scope' => array('ipaddress' => IP_ADDRESS)
        )
    ),
〜 省略 〜
<?php
define('IP_ADDRESS', $_SERVER['SERVER_ADDR']);


定数にしちゃう!


読み込む順番も以前の記事から確認しても問題なさそうです。


aipacommander.hatenablog.jp

/app/Config/const.php // constここ
/lib/Cake/Core/CakePlugin.php
/lib/Cake/Routing/Dispatcher.php
/lib/Cake/Event/CakeEventListener.php
/lib/Cake/Network/CakeRequest.php
/lib/Cake/Network/CakeResponse.php
/lib/Cake/Event/CakeEvent.php
/lib/Cake/Event/CakeEventManager.php
/lib/Cake/Routing/Filter/AssetDispatcher.php
/lib/Cake/Routing/DispatcherFilter.php
/lib/Cake/Routing/Filter/CacheDispatcher.php
/lib/Cake/Routing/Router.php
/app/Config/routes.php
/lib/Cake/Routing/Route/CakeRoute.php
/lib/Cake/Config/routes.php
/lib/Cake/Routing/Route/PluginShortRoute.php
/app/Controller/MainsController.php // これは自作のController
/app/Controller/AppController.php // AppController ここ


これはいい方法なのか、バッドノウハウなのかわかりませんが、とりまこれでできました。