2016-03-22 4 views
0

Иногда, возможно, когда я остаюсь надолго без действий, или когда я пытаюсь получить доступ непосредственно к определенной странице, отображается всплывающее окно с подтверждением подлинности, запрашивающее мой логин и пароль.CakePHP3.x: требуется аутентификация popup

Но даже если я заполнить необходимые поля, аутентификация не выполняется и обновления просто отображать «Несанкционированное.

Кажется, это всплывающее окно не вызывает мой метод регистрации.

Можете ли вы сказать, мне, как учетные данные должны быть Передано в мой контроллер пользователя для входа?

с уважением,

EDIT Мой Войти Форма

<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> 

** EDIT ** Когда я ввожу свой логин/пароль в всплывающем окне открыт в браузере, 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

Не могли бы вы разместить регистрационную форму – dav

+0

@dav Привет, Да, это уже сделано. – 2ndGAB

+0

, если ваша догадка правильная, и это не будет правильным действием, вы можете попробовать поставить этот '$ this-> FormB-> create ('Users', array ('url' => '/ users/your_login_action'))' - поэтому, давая точный url, чтобы отправить форму – dav

ответ

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') 
       ) 
      ), 

Если кто-то хочет знать, чтобы исправить, пожалуйста, рассмотреть мое сообщение по адресу:

Cakephp 3 - Auth session cannot destroy

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 подлинности имеет смысл, но это то, что я сделал первым, и это потому, что я иногда видел всплывающее окно, особенно когда сеанс, прошедший проверку по форме, истек.

Если вам нужен механизм аутентификации normal для вашего сайта, загрузите компонент Auth с помощью Form в свой AppController.php. Если вам необходим механизм аутентификации для доступа к API, я советую создать ApiController.php, где вы загрузите Auth компонент с Basic, как указано выше. Затем вы, API-контроллер, расширьте ApiController вместо AppController.

Это то, что я могу сказать из моих знаний. Гуру CakePHP мог бы добавить больше информации или исправить меня, если это необходимо.

Смежные вопросы