2016-08-08 49 views
0

Auf meiner Anmeldeseite gibt es drei Felder: Rolle, Benutzername und Passwort. Rolle ist eine Auswahloption, bei der Sie entweder einen Kunden oder einen Auftragnehmer auswählen können.Wie können Sie zusätzliche Felder außer Benutzernamen und Passwort authentifizieren?

In meiner DB gibt es einen Benutzer, der ein Client ist.

Sagen, der Benutzer möchte sich anmelden, aber er wählt versehentlich eine Auswahl an Auftragnehmer. Er drückt auf den Login-Knopf, aber es lässt ihn nicht, weil er kein Bauunternehmer ist.

Wie können Sie das erreichen? Ich habe das versucht:

public function initialize() 
{ 
    $this->loadComponent('Flash'); 
    $this->loadComponent('Auth', [ 
     'loginRedirect' => [ 
      'controller' => 'Articles', 
      'action' => 'index' 
     ], 
     'logoutRedirect' => [ 
      'controller' => 'Pages', 
      'action' => 'display', 
      'home' 
     ], 
     'authenticate' => [ 
      'Form' => [ 
       'fields' => ['role' => 'role', 'username' => 'username', 'password' => 'password'] 
      ] 
     ] 
    ]); 
} 

Aber es hat nicht funktioniert.

Das ist meine Ansicht:

<?= $this->Flash->render() ?> 
<?= $this->Form->create('User', array('class' => 'login-form')) ?> 
<div class="form-group"> 
<?php 
    $array = array('client' => 'Client', 'contractor' => 'Contractor'); 
    echo $this->Form->input(
     'role', 
     array('label' => false, 'options' => $array, 'default' => 'client') 
    ); 

?> 

</div> 
<div class="form-group"> 
    <?= $this->Form->input('username', array('label' => false, 'placeholder' => 'Username...')) ?> 
</div> 
<div class="form-group"> 
    <?= $this->Form->input('password', array('label' => false, 'placeholder' => 'Password...')) ?>  
</div> 
<?= $this->Form->button(__('Sign in!')); ?> 
<?= $this->Form->end() ?> 

Dies ist mein Controller:

if ($this->request->is('post')) { 
     $user = $this->Auth->identify(); 
     if ($user) { 
      $this->Auth->setUser($user); // hydration 
      return $this->redirect($this->Auth->redirectUrl()); 
     } 
            // use the layout/login.ctp layout 
     $this->Flash->error(__('Invalid username or password, try again')); 
    } 

    // use the login layout 
    $this->viewBuilder()->layout("login"); 

Antwort

0

Sie wollen this section of the manual sorgfältig und bis zum Ende zu lesen.

Was Sie wird nicht funktionieren, weil:

fields Die Felder von einen Benutzer zu identifizieren, zu verwenden. Sie können die Schlüssel username und password verwenden, um Ihre Felder für Benutzername und Passwort anzugeben.

durch diese wenigen Zeilen

unten Gefolgt

Die userFields Option wurde als 3,1 veraltet. Verwenden Sie die Option() in Ihrem benutzerdefinierten Finder.

Was sollten Sie mitbringen: Customising Find Query

Also nur einen benutzerdefinierten finder implementieren und Ihre Form Auth Adapter sagen, dass zu verwenden: Abfrage

public function initialize() 
{ 
    parent::initialize(); 
    $this->loadComponent('Auth', [ 
     'authenticate' => [ 
      'Form' => [ 
       'finder' => 'auth' 
      ] 
     ], 
    ]); 
} 
+0

$ -> wählen ([ 'id', 'Benutzername', 'Passwort', 'Rolle']) -> where (['Users.role' => 'role']); Rückgabe $ query; scheint nicht zu funktionieren. Wo mache ich das falsch? –

+0

Dies scheint zu versuchen, Benutzerdatensätze auszuwählen, bei denen die Rollenspalte auf die Zeichenfolge "role" gesetzt ist. Vermutung, dass das nicht wirklich das ist, was du willst? –