私を正しい方向に押してくれた@jerermyharrisに大いに感謝します。これが私がやったことと一致します。
1. AuthComponent の拡張
App::uses('AuthComponent', 'Controller/Component');
class MyAuthComponent extends AuthComponent {
var $components = array('Session');
public function identify(CakeRequest $request, CakeResponse $response) {
if (empty($this->_authenticateObjects)) {
$this->constructAuthenticate();
}
foreach ($this->_authenticateObjects as $auth) {
$result = $auth->authenticate($request, $response);
if (!empty($result) && is_array($result)) {
if(isset($result['Redirect']))
{
$this->Session->write('Auth.redirect', $result['Redirect']);
}
return $result;
}
}
return false;
}
}
2.これをAppControllerコンポーネントに追加します
public $components = array(
'Auth' => array(
'className' => 'MyAuth',
)
);
AuthComponent の他の定義にこのビットを追加します。
3. 認証コンポーネントからリダイレクトを返す
App::uses('BaseAuthenticate', 'Controller/Component/Auth');
class TutorAuthenticate extends BaseAuthenticate {
public function authenticate(CakeRequest $request, CakeResponse $response) {
$user = ...... // However you authenticate your user
$user['Redirect'] = "http://example.com";
return $user;
}
}
したがって、ユーザーに基づいてリダイレクトする場合は、追加するだけで済みます。そうしない場合、cake は AppController で設定したディレクティブに従います。
うわー、それは私が余分にやらなければならなかったようですが、それは正しいことです.