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