1

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'));
            }

        }
    }
4

0 に答える 0