2016-03-22 21 views
0

時には、何もしなくても十分に長い時間がかかる場合や、特定のページに直接アクセスしようとすると、ログインとパスワードの入力を求める「認証必須」ポップアップが表示されます。CakePHP3.x:認証が必要なポップアップ

しかし、私は必要なフィールドに記入した場合でも、認証が行われていないとリフレッシュがちょうど「不正な表示。

このポップアップが私のloginメソッドを呼び出していないようです。

あなたが言うことができます私の資格情報は、私のユーザーのログイン・コントローラにtransmitedことになっているか?

よろしく、

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 **は、私は、ブラウザで開いたポップアップでの私のログイン/パスワードを入力すると、ケーキは、次のエラー

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 Hi Davを投稿してください。 – 2ndGAB

+0

あなたの推測が正しければ、正しいアクションには向かないでしょう。この '$ this-> FormB-> create( 'Users'、array( 'url' => '/ users/your_login_action'))' - したがって、フォームを提出するための正確なURLを与える – dav

答えて

0

私は投稿と全く同じ問題があります。私は誰かに助けられていると考えられ、その問題を解決しました。

$this->loadComponent('Auth', [ 
      'authenticate' => array(
       'Form' => array(
        // 'fields' => array('username' => 'email'), 
        'scope' => array('is_delete' => '0') 
       ) 
      ), 

と私はそれを編集した後、それは完全に実行されました:

マイ設定Authコンポーネントの前に。通常
:問題は、私はAPIリクエストから認証するためにAppControllerで行われた変更によって引き起こされた

Cakephp 3 - Auth session cannot destroy

1

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

誰かがで私の投稿を閲覧してください修正するために知りたい場合は

あなたはそのようなコンポーネント 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 
    ]); 

このようにすると、Webページにアクセスしようとするとログインポップアップが表示されます。

両方FormBasic認証は本当に理にかなって、それは私が最初にやったことだと私は時々フォームによって認証されたセッションの期限が切れたときに、特に、表示されたポップアップを見たからだとロード場合、私は知りません。

ウェブサイトにnormal認証メカニズムが必要な場合は、FormのコンポーネントをAppController.phpにロードしてください。 APIアクセスのためのbasic認証メカニズムが必要な場合は、上記のようにAuthコンポーネントをBasicでロードするApiController.phpを作成することをお勧めします。その後、APIコントローラはAppControllerの代わりにApiControllerを拡張します。

これは私が知っているからです。 CakePHPの教祖は、必要に応じてもっと情報を追加したり、私を修正することができます。

関連する問題