有时,也许当我长时间没有动作或者我尝试直接访问特定页面时,会显示“需要身份验证”弹出窗口,询问我的登录名和密码。
但即使我填写了必填字段,验证也没有完成,刷新只显示“未经授权。
这个弹出窗口似乎没有调用我的登录方法。
您能告诉我凭据应该如何传输到我的用户登录控制器吗?
此致
编辑我的登录表单
<div class="container-fluid">
<br/>
<div class="container-fluid col-md-4 col-md-offset-4">
<h1>Se connecter</h1>
<div class="row">
<div class="col-md-12">
<?= $this->FormB->create(); ?>
<div class="panel panel-default">
<div class="panel-heading">
<h2><?= __("Saisissez vos identifiants") ?></h2>
</div>
<div class="panel-body">
<?= $this->FormB->input('username', ['label' => __("Nom d'utilisateur :"), 'placeholder' => __("Nom d'utilisateur")]); ?>
<?= $this->FormB->input('password', ['label' => __("Mot de passe :"), 'placeholder' => __("Mot de passe")]); ?>
<p><em><?= $this->Html->link(__("Mot de passe oublié ?"), ['action' => 'forgotPassword']); ?></em></p>
<br/>
<?php if ($activeLink == 1): ?>
<p><em><?= $this->Html->link(__("Renvoyer l'email d'activation ?"), ['controller' => 'Users', 'action' => 'resend', 'username' => $username]); ?></em></p>
<br/>
<?php endif ?>
</div>
</div>
<div>
<?= $this->Form->button(isset($btnlabel) ? __("$btnlabel") : __("Enregistrer"), ["class" => "btn btn-primary btn-block"]) ?>
</div>
<?= $this->FormB->end() ?>
</div>
</div>
</div>
</div>
**编辑**当我在浏览器打开的弹出窗口中输入我的登录名/密码时,Cake会生成以下错误
2016-03-24 16:53:11 Error: [Cake\Network\Exception\UnauthorizedException] Unauthorized
Request URL: /pros/Owners/account
Stack Trace:
#0 /home/MyApp/vendor/cakephp/cakephp/src/Controller/Component/AuthComponent.php(359): Cake\Auth\BasicAuthenticate->unauthenticated(Object(Cake\Network\Request), Object(Cake\Network\Response))
#1 /home/MyApp/vendor/cakephp/cakephp/src/Controller/Component/AuthComponent.php(296): Cake\Controller\Component\AuthComponent->_unauthenticated(Object(App\Controller\Pros\OwnersController))
#2 /home/MyApp/vendor/cakephp/cakephp/src/Controller/Component/AuthComponent.php(258): Cake\Controller\Component\AuthComponent->authCheck(Object(Cake\Event\Event))
#3 /home/MyApp/vendor/cakephp/cakephp/src/Event/EventManager.php(385): Cake\Controller\Component\AuthComponent->startup(Object(Cake\Event\Event))
#4 /home/MyApp/vendor/cakephp/cakephp/src/Event/EventManager.php(355): Cake\Event\EventManager->_callListener(Array, Object(Cake\Event\Event))
#5 /home/MyApp/vendor/cakephp/cakephp/src/Event/EventDispatcherTrait.php(78): Cake\Event\EventManager->dispatch(Object(Cake\Event\Event))
#6 /home/MyApp/vendor/cakephp/cakephp/src/Controller/Controller.php(495): Cake\Controller\Controller->dispatchEvent('Controller.star...')
#7 /home/MyApp/vendor/cakephp/cakephp/src/Routing/Dispatcher.php(109): Cake\Controller\Controller->startupProcess()
#8 /home/MyApp/vendor/cakephp/cakephp/src/Routing/Dispatcher.php(87): Cake\Routing\Dispatcher->_invoke(Object(App\Controller\Pros\OwnersController))
#9 /home/MyApp/webroot/index.php(37): Cake\Routing\Dispatcher->dispatch(Object(Cake\Network\Request), Object(Cake\Network\Response))
#10 {main}
那么我该如何拦截这种身份验证尝试呢?
答案 0 :(得分:1)
问题是由我在AppController
中对API请求进行身份验证所做的修改引起的:
通常,您应该加载Auth
组件:
$this->loadComponent('Auth', [
'authorize' => ['Controller'],
'authenticate' => [
'Form' => [
'scope' => ['Users.active' => 1]
],
],
'loginRedirect' => [
'controller' => 'Users',
'action' => 'account'
],
'logoutRedirect' => [
'controller' => 'Index',
'action' => 'index'
]
]);
这样,您就可以在表单中验证填写凭证。
另一种方法是使用Basic
身份验证。它的使用较少,但可以像这样实现。
$this->loadComponent('Auth', [
'authorize' => ['Controller'],
'authenticate' => [
'Basic' => [
'fields' => ['username' => 'username', 'password' => 'password'],
'userModel' => 'Users'
],
],
'storage' => 'Memory',
'unauthorizedRedirect' => false
]);
这样做会导致在您尝试访问网页时显示登录弹出窗口。
我不知道加载Form
和Basic
身份验证是否真的有意义,但这是我先做的事情,因为我有时会看到弹出窗口,特别是当会话通过Form验证时过期。
如果您的网站需要normal
身份验证机制,请在AppController.php中加载Auth
组件Form
。
如果您需要basic
身份验证机制来进行API访问,我建议创建一个ApiController.php,您将在其中加载Auth
组件Basic
,如上所述。然后,API控制器将扩展ApiController而不是AppController。
这是我可以从我的知识中说出来的。 CakePHP大师可以添加更多信息或在必要时纠正我。
答案 1 :(得分:0)
我和帖子完全相同。我被认为是某人的帮助,我解决了这个问题。
我的配置auth组件之前:
$this->loadComponent('Auth', [
'authenticate' => array(
'Form' => array(
// 'fields' => array('username' => 'email'),
'scope' => array('is_delete' => '0')
)
),
在我编辑之后,它运行得很好。
$this->loadComponent('Auth', [
'authenticate' => array(
'Form' => array(
'userModel' => 'MUsers', //Add this line
'fields' => array('username' => 'username',
'password' => 'password'), //Edited this line
'scope' => array('is_delete' => '0')
)
),
如果有人想知道要修复,请查看我的帖子: