Как войти / зарегистрироваться в Opencart используя OTP (одноразовый пароль) - PullRequest
4 голосов
/ 14 апреля 2020

Я создаю Android приложение, использующее opencart в качестве моего бэкэнда.

Я хочу, чтобы вход в систему / регистрация основывались на opp (пароль никогда не требовался). Я знаю, как отправить смс пользователю и подтвердить номер телефона. Я также собираю электронную почту и имя пользователя.

Мне нужно понять, как я могу зарегистрировать пользователя без пароля, а затем заставить логин работать без пароля?

1 Ответ

3 голосов
/ 23 апреля 2020

Весь процесс регистрации в opencart выполняется в модели: каталог / модель / учетная запись / клиент. php функция addCustomer

$this->db->query("INSERT INTO " . DB_PREFIX . "customer SET customer_group_id = '" . (int)$customer_group_id . "', store_id = '" . (int)$this->config->get('config_store_id') . "', language_id = '" . (int)$this->config->get('config_language_id') . "', firstname = '" . $this->db->escape($data['firstname']) . "', lastname = '" . $this->db->escape($data['lastname']) . "', email = '" . $this->db->escape($data['email']) . "', telephone = '" . $this->db->escape($data['telephone']) . "', fax = '" . $this->db->escape($data['fax']) . "', custom_field = '" . $this->db->escape(isset($data['custom_field']['account']) ? json_encode($data['custom_field']['account']) : '') . "', salt = '" . $this->db->escape($salt = token(9)) . "', password = '" . $this->db->escape(sha1($salt . sha1($salt . sha1($data['password'])))) . "', newsletter = '" . (isset($data['newsletter']) ? (int)$data['newsletter'] : 0) . "', ip = '" . $this->db->escape($this->request->server['REMOTE_ADDR']) . "', status = '1', approved = '" . (int)!$customer_group_info['approval'] . "', date_added = NOW()");

Все процессы входа в систему opencart находятся в библиотечной системе / library / cart / customer. php функция входа в систему

if ($override) {
        $customer_query = $this->db->query("SELECT * FROM " . DB_PREFIX . "customer WHERE LOWER(email) = '" . $this->db->escape(utf8_strtolower($email)) . "' AND status = '1'");
    } else {
        $customer_query = $this->db->query("SELECT * FROM " . DB_PREFIX . "customer WHERE LOWER(email) = '" . $this->db->escape(utf8_strtolower($email)) . "' AND (password = SHA1(CONCAT(salt, SHA1(CONCAT(salt, SHA1('" . $this->db->escape($password) . "'))))) OR password = '" . $this->db->escape(md5($password)) . "') AND status = '1' AND approved = '1'");
    }

Параметр $ override используется для входа без пароля из админ-панели с помощью токена. Токен является одноразовым и очищается после входа в систему ..

Некоторый код об этом процессе есть в каталоге контроллеров / контроллере / учетной записи / логине. php

if (!empty($this->request->get['token'])) { 
.....
$customer_info = $this->model_account_customer->getCustomerByToken($this->request->get['token']); // find customer by token

Вы можете использовать некоторые ha sh с пользовательского устройства в качестве пароля, это решение будет более безопасным, чем вход без закодированный пароль otp ... Вы можете использовать пароль otp только для подтверждения номера телефона

ОБНОВЛЕНИЕ: Вы можете сгенерировать токен пользователя в приложении, чем обновить базу данных opencart из приложения с запросом: «ОБНОВЛЕНИЕ». DB_PREFIX. "клиент SET token = 'token_for_user' ГДЕ телефон = 'user_telephone" по телефону пользователя. ИЛИ "ОБНОВЛЕНИЕ". DB_PREFIX. "customer SET token = 'token_for_user' WHERE email = 'user_email" by user_email ... чем сделать GET-запрос http://your-site.com/index.php?route=account / login & token = generate_token ... После этого запроса будет создан сеанс пользователя .. Email / номер телефона понадобится только для обновления токена ... Вход в систему будет осуществляться только по сгенерированному токену, никаких других данных не требуется, так как теперь работает вход из админ-панели в учетную запись клиента.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...