我有许多扩展BaseAuthenticate
类的身份验证组件。这些是以正常方式在AppController中设置的。
身份验证组件是否可以更改AuthComponent的loginRedirect变量?
为了澄清这种情况,我的一个身份验证组件会查看某个用户子集。在检查该人是否有任何未结清的发票之前,它会检查凭证是否有效。我希望将用户重定向到给定的页面或将其完全阻止,具体取决于未完成的价值。
由于
答案 0 :(得分:1)
是的,这是可能的。 AuthComponent的重定向位置只是一个会话变量(从技术上讲,它可以在任何地方设置)。
要更改重定向位置,您可以手动设置:
$this->Session->write('Auth.redirect', 'http://example.com');
在下一个请求中,它们将由AuthComponent重定向。
或者,让您的组件重定向然后在那里:
$this->_Collection->getController()->redirect('http://example.com');
答案 1 :(得分:0)
非常感谢@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中设置的指令。
哇,好像我不得不额外加载,但这是正确的做法。