Cakephp 3认证教程登录直接发布
我已经关注了官方网站上的教程,但是重定向部分第一次不起作用 步骤1:转到用户/登录并使用正确的凭据登录。Cakephp 3认证教程登录直接发布,php,authentication,cakephp,Php,Authentication,Cakephp,我已经关注了官方网站上的教程,但是重定向部分第一次不起作用 步骤1:转到用户/登录并使用正确的凭据登录。 结果:登录成功,但重定向到页面/主页,而不是文章/索引。 步骤2:再次转到用户/登录,并使用正确的凭据登录。 结果:正确重定向到文章/索引(会话已登录) 我怎样才能解决这个问题 在我尝试授权部分之前,它似乎工作正常。(不确定)。但我已经评论了所有授权部分。还没修好 我遗漏了什么 应用控制器 <?php namespace App\Controller; use Cake\Contro
结果:登录成功,但重定向到页面/主页,而不是文章/索引。
步骤2:再次转到用户/登录,并使用正确的凭据登录。
结果:正确重定向到文章/索引(会话已登录) 我怎样才能解决这个问题 在我尝试授权部分之前,它似乎工作正常。(不确定)。但我已经评论了所有授权部分。还没修好 我遗漏了什么 应用控制器
<?php
namespace App\Controller;
use Cake\Controller\Controller;
use Cake\Event\Event;
class AppController extends Controller
{
public function initialize()
{
$this->loadComponent('Flash');
$this->loadComponent('Auth', [
// 'authorize' => ['Controller'], // Added this line
'loginRedirect' => [
'controller' => 'Articles',
'action' => 'index'
],
'logoutRedirect' => [
'controller' => 'Pages',
'action' => 'display',
'home'
]
]);
}
//public function isAuthorized($user)
//{
// // Site Admin can access every action
// if (isset($user['role']) && $user['role'] === 'admin') {
// return true;
// }
//
// // Default deny
// return false;
//
//}
public function beforeFilter(Event $event)
{
$this->Auth->allow(['index','display']);
}
}
?>
更新
如果我直接访问登录URL,即users/login,然后登录,那么它工作得非常好。
但是,我的页面/主页中有一个按钮,单击该按钮可重定向到用户/登录页面。
通过按钮使用此路径,如果我登录,我将面临问题
注意:如果使用debugKit查看会话信息,则会显示重定向到/
home.ctp文件中的按钮代码
<?php echo $this->Html->link('<span class = "glyphicon glyphicon-log-in"></span> Login',['controller' => 'users', 'action' => 'login'],['escape' => false]);?>
通过编写以下代码来解决此问题:
用户控制器:
AppController:
这里,$this->Here
是您的文件路径。希望这对你有帮助 来自CakePHP文档,关于$loginDirect:
:$loginRedirect
如果用户在会话中具有Auth.redirect值,则将忽略此值
因此,您的$this->Auth->loginDirect
将被忽略。您可以从会话中手动删除Auth.redirect
值。这是一个快速的破解,不需要更改每个URL的值
$session = $this->request->session();
if($session->read('Auth.redirect') === '/') {
$session->delete('Auth.redirect');
}
清除所有缓存和会话数据后重试?@AddWebSolutionPvtLtd我试过了。然而,我发现了另一件事。请在问题中找到我的更新,谢谢。现在我明白了。问题在于Auth.redirect
值。谢谢你的修复
public function beforeFilter(){
if($this->here != '/cmap/users/login'){
$this->Session->write('Auth.redirect', $this->here);
}
}
$session = $this->request->session();
if($session->read('Auth.redirect') === '/') {
$session->delete('Auth.redirect');
}