我有一个CakePHP项目,我在其中修改了“app / config / routes.php”,以便根指向“用户”控制器的“仪表板”操作。换句话说,这两个网址会转到同一个地方:
http://example.com/users/dashboard
我在“App”控制器中设置了“Auth”组件,如下所示:
class AppController extends Controller {
var $components = array('Auth', 'Session');
function beforeFilter() {
$this->Auth->authorize = 'controller';
$this->Auth->loginRedirect = array('controller' => 'users', 'action' => 'dashboard');
if ($this->Auth->user()) {
$this->set('logged_in', true);
}
else {
$this->set('logged_in', false);
}
}
}
我希望如此,如果未经过身份验证的用户直接进入http://example.com/users/dashboard,他们将被带到登录页面,显示“Auth”组件的“authError”消息,但是如果他们转到http://example.com/,他们将被带到登录页面,而不会显示“Auth”组件的“authError”消息。这可能吗?
答案 0 :(得分:1)
我通过将以下代码放入“用户”控制器的“登录”操作中解决了这个问题:
if ($this->Session->read('Auth.redirect') == $this->webroot && $this->Session->read('Message.auth.message') == $this->Auth->authError) {
$this->Session->delete('Message.auth');
}
答案 1 :(得分:0)
好吧,我不明白为什么有时你会显示错误,为什么有时候不会......但是你可以负担得起这个创建一个isAuthorized方法并修改默认AuthComponent行为的所有逻辑。
打开Auth组件并检查方法“startup()”。在那里,在它的最后一行,你会看到这个:
$this->Session->setFlash($this->authError, $this->flashElement, array(), 'auth');
$controller->redirect($controller->referer(), null, true);
这是负责显示错误的部分。
在此之前,你将会......
if ($this->isAuthorized($type)) {
return true;
}
因此,您可以更改isAuthorized方法以在需要时更改此消息。
很多工作(我认为......)没什么。
PS。可能有一种更简单的方法可以忽略我
答案 2 :(得分:0)
长期以来一直在寻找类似的东西!谢谢。
我必须做一点改动,然后$this->webroot
不是“/”:
if (str_replace("//","/",$this->webroot.$this->Session->read('Auth.redirect')) == $this->webroot && $this->Session->read('Message.auth.message') == $this->Auth->authError) {
$this->Session->delete('Message.auth');
}
答案 3 :(得分:0)
如果您真的想在主页上阻止authError
消息并简单地重定向到登录页面,那么您必须将false
作为authError
的参数
class AppController extends Controller {
public function initialize() {
parent::initialize();
$this->loadComponent('RequestHandler');
$this->loadComponent('Flash');
$this->loadComponent('Auth', [
'authError' => false
]);
}
}