Authentication Cakephp 3身份验证插件,登录URL不匹配

Authentication Cakephp 3身份验证插件,登录URL不匹配,authentication,cakephp,plugins,cakephp-3.x,cakephp-3.8,Authentication,Cakephp,Plugins,Cakephp 3.x,Cakephp 3.8,我想使用CakePHP3.8的身份验证插件,但我遇到了文档中没有的问题 在开始学习()之后,我有一个问题 最初,指定$fields是为了更改真实数据库中的用户名和密码关系,和Auth组件相同,登录URL是加载登录表单的地方 首先,在《入门》或文档的任何部分中都没有提到登录视图(表单),因此,像旧的Auth组件一样,我将其创建为Users/login.ctp <div class="users form"> <?= $this->Flash->render('

我想使用CakePHP3.8的身份验证插件,但我遇到了文档中没有的问题

在开始学习()之后,我有一个问题

最初,指定$fields是为了更改真实数据库中的用户名和密码关系,和Auth组件相同,登录URL是加载登录表单的地方

首先,在《入门》或文档的任何部分中都没有提到登录视图(表单),因此,像旧的Auth组件一样,我将其创建为Users/login.ctp

<div class="users form">
    <?= $this->Flash->render('auth') ?>
    <?= $this->Form->create() ?>
    <fieldset>
        <legend><?= __('Please enter your email and password') ?></legend>
        <?= $this->Form->input('email') ?>
        <?= $this->Form->input('password') ?>
    </fieldset>
    <?= $this->Form->button(__('Login')); ?>
    <?= $this->Form->end() ?>
</div>
但当我尝试登录时,出现了以下错误,在login.ctp中的var_dump之后,我得到了以下结果:

object(Authentication\Authenticator\Result)[124]
  protected '_status' => string 'FAILURE_OTHER' (length=13)
  protected '_data' => null
  protected '_errors' => 
    array (size=1)
      0 => string 'Login URL `http://localhost/users/login` did not match `/users/login`.' (length=70)
如果我注释了
'loginUrl'=>'/users/login'
行,那么登录工作正常

补充说明: -我用哈希密码和textplane密码进行了测试,结果相同。 -我已经添加了
$this->Authentication->allowUnauthenticated(['view','index','login','add'])在beforeFilter中访问登录。
-这是一个干净的CakePHP3.8安装,只有数据库对于测试是相同的。
-我只使用蛋糕控制台添加了积垢

我想了解更多关于loginURL的信息,我应该在UsersController中包括一些用法?是什么导致了这个错误


谢谢

错误消息目前有点误导,因为它没有显示可能的基本目录,而这正是您遇到的实际问题。我已经提出了建议,可能会在下一个版本中发布

当应用程序位于子目录中时,您需要确保登录URL配置考虑到这一点,即通过传递包含基本目录的URL,您可以手动执行以下操作:

'loginUrl' => '/myapp/users/login'
或使用路由器:

'loginUrl' => \Cake\Routing\Router::url('/users/login')
'urlChecker' => 'Authentication.CakeRouter',
'loginUrl' => [
    'plugin' => null,
    'prefix' => null,
    'controller' => 'Users',
    'action' => 'login'
]
另一个选项是使用基于路由的URL检查器,该检查器可以通过form authenticators
urlChecker
选项进行配置,然后您可以使用URL数组定义登录URL,而无需使用路由器:

'loginUrl' => \Cake\Routing\Router::url('/users/login')
'urlChecker' => 'Authentication.CakeRouter',
'loginUrl' => [
    'plugin' => null,
    'prefix' => null,
    'controller' => 'Users',
    'action' => 'login'
]
另见:


您的应用程序是否位于子目录中(例如
http://localhost/myapp/
?您使用的验证插件的确切版本是什么?是的,我在以前的Auth组件中使用的是authentication 1.4.0,只有斜杠工作正常,我将尝试添加根斜杠。感谢您尝试将基础添加到您的登录URL配置中,即
'loginUrl'=>'/myapp/users/login'
。如果可以解决您的问题,我将添加一个解释。使用Router::url()在CakePHP 4.0.2中使用身份验证插件时出现了完全相同的错误。现在,如果可以指定多个LoginURL…@draconigen,只需传递一个字符串url数组或一个嵌套url数组。