users テーブルに password と salt の 2 つのフィールドがあります。データを保存している間、次のコードを使用して、正常に機能し、データが両方の列に保存されています。
$password = $this->Custom->hashSSHA();
$user->password = $password['encrypted'];
$user->salt = $password['salt'];
$password
次の配列値を持っています。
Array
(
[salt] => 993ffb0265
[encrypted] => 8FdzWdZ5jXN3GC+GzkO9p6ee/nk5OTNmZmIwMjY1
)
$password['encrypted'] = 8FdzWdZ5jXN3GC+GzkO9p6ee/nk5OTNmZmIwMjY1993ffb0265.
以下にログインコードを添付します。ここでは、パスワードとソルトを手動で確認しました。しかし、うまくいきません。
public function login() {
$this->viewBuilder()->layout('');
if ($this->request->is('post')) {
$data = $this->request->data;
$query = $this->Users->find('all')
->select(['Users.id', 'Users.email', 'Users.name', 'Users.password', 'Users.salt', 'Users.is_active'])
->where(['Users.email' => $data['email'], ['Users.is_active' => 1]]);
$row = $query->first();
$number_login = $query->count();
if ($number_login != 0) {
$password = $this->Custom->checkhashSSHA($row['salt'], $data['password']);
if ($password == $row['password']) {
$session = $this->request->session();
$session->write('User_name', $row['name']);
$session->write('User_email', $row['email']);
$session->write('User_id', $row['id']);
return $this->redirect(['action' => 'index']);
} else {
$this->Flash->error(__('Invalid username or password, try again'));
}
} else {
$this->Flash->error(__('Account not activated yet'));
}
}
}