Mar*_*o C 2 authentication plugins cakephp cakephp-3.x cakephp-3.8
我想使用 CakePHP 3.8 的身份验证插件,但我遇到了文档中没有的问题。
在遵循入门 ( https://book.cakephp.org/authentication/1/en/index.html ) 之后,我有一个问题。
最初指定 $fields 来更改真实数据库中的用户名和密码关系,与 Auth 组件相同,登录 URL 是登录表单 si 加载的位置。
首先,在入门或文档的任何部分都没有说明登录视图(表单),因此,像旧的 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>
Run Code Online (Sandbox Code Playgroud)
我在 Application.php 中的代码包括这个(及其各自的用途和实现):
public function getAuthenticationService(ServerRequestInterface $request, ResponseInterface $response)
{
$service = new AuthenticationService();
$fields = [
'username' => 'email',
'password' => 'password'
];
// Load identifiers
$service->loadIdentifier('Authentication.Password', compact('fields'));
// Load the authenticators, you want session first
$service->loadAuthenticator('Authentication.Session');
$service->loadAuthenticator('Authentication.Form', [
'fields' => $fields,
'loginUrl' => '/users/login'
]);
return $service;
}
Run Code Online (Sandbox Code Playgroud)
但是当我尝试登录时,出现此错误,在 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)
Run Code Online (Sandbox Code Playgroud)
如果我注释'loginUrl' => '/users/login'行,则登录工作正常。
附加说明: - 我已经使用散列和文本平面密码进行了测试,结果相同。- 我添加$this->Authentication->allowUnauthenticated(['view', 'index', 'login', 'add']);了 beforeFilter 来访问登录。- 这是一个干净的 cakephp 3.8 安装,只有数据库是相同的测试。- 我只用蛋糕控制台添加了 Crud。
我想了解有关该 loginURL 的更多信息,我应该在 UsersController 中包含一些用途吗?是什么导致了这个错误?
谢谢
ndm*_*ndm 10
错误消息目前有点误导,因为它没有向您显示可能的基本目录,而这正是您遇到的实际问题。我已经为此提出了一个修复程序,它可能会进入下一个版本。
当您的应用程序位于子目录中时,您需要确保您的登录 URL 配置考虑到这一点,即通过传递包含基本目录的 URL,您可以手动执行以下操作:
'loginUrl' => '/myapp/users/login'
Run Code Online (Sandbox Code Playgroud)
或使用路由器:
'loginUrl' => \Cake\Routing\Router::url('/users/login')
Run Code Online (Sandbox Code Playgroud)
'loginUrl' => \Cake\Routing\Router::url([
'plugin' => null,
'prefix' => null,
'controller' => 'Users',
'action' => 'login'
])
Run Code Online (Sandbox Code Playgroud)
另一种选择是使用基于路由的 URL 检查器,它可以通过表单身份验证器urlChecker选项进行配置,然后您可以使用 URL 数组定义登录 URL,而不必使用路由器:
'urlChecker' => 'Authentication.CakeRouter',
'loginUrl' => [
'plugin' => null,
'prefix' => null,
'controller' => 'Users',
'action' => 'login'
]
Run Code Online (Sandbox Code Playgroud)
也可以看看:
| 归档时间: |
|
| 查看次数: |
1319 次 |
| 最近记录: |