Jump to content
Sign in to follow this  
serge

[Решено] Вход по номеру телефона

Recommended Posts

Здравствуйте! хотел бы поинтересоваться, ктото уже реализовывал, или находил решения немного иной авторизации. Чтобы при входе в личный кабинет, вместо логина-email, был логин-телефон, ну или и то и то, как в ВК допустим.

Share this post


Link to post
Share on other sites

А если использовать авторизацию через vk? Проще\дешевле\надежнее.

Share this post


Link to post
Share on other sites

к сожалению через ВК неподходит, в силу того, что интеграции с соц сетями не будет. Если были какието такие решения уже, попадались вам, или просто куда копать? Определять телефон логином вместо имейла

Share this post


Link to post
Share on other sites

"Копать" в форму авторизации и систему регистрации. А Вы куда копать собирались?  -_-

Share this post


Link to post
Share on other sites

Не, ну это ясно) Я так понял, решений по данному вопросу не было

Share this post


Link to post
Share on other sites

Хотелось бы поднять тему - также интересна задача.

Share this post


Link to post
Share on other sites

А в чем проблема-то?

 

При авторизации проверять пару - телефон/пароль,  а не почта/пароль

Share this post


Link to post
Share on other sites

Можно сделать так:

 

system/library/customer.php

 

ocstore 1.5.4.1

 

найти 

if ($override) {
  $customer_query = $this->db->query("SELECT * FROM " . DB_PREFIX . "customer where LOWER(email) = '" . $this->db->escape(strtolower($email)) . "' AND status = '1'");
} else {
  $customer_query = $this->db->query("SELECT * FROM " . DB_PREFIX . "customer WHERE LOWER(email) = '" . $this->db->escape(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'");
}

для использования варианта авторизации "телефон или email" заменить на

if ($override) {
  $customer_query = $this->db->query("SELECT * FROM " . DB_PREFIX . "customer where LOWER(email) = '" . $this->db->escape(strtolower($email)) . "' OR telephone = '" . $this->db->escape(strtolower($email)) . "' AND status = '1'");
} else {
  $customer_query = $this->db->query("SELECT * FROM " . DB_PREFIX . "customer WHERE LOWER(email) = '" . $this->db->escape(strtolower($email)) . "' OR telephone = '" . $this->db->escape(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'");
}

для использования авторизации по номеру телефона

if ($override) {
  $customer_query = $this->db->query("SELECT * FROM " . DB_PREFIX . "customer where telephone = '" . $this->db->escape(strtolower($email)) . "' AND status = '1'");
} else {
  $customer_query = $this->db->query("SELECT * FROM " . DB_PREFIX . "customer WHERE telephone = '" . $this->db->escape(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'");
}

Для ocstore 1.5.5.1 вместо strtolower используется utf8_strtolower, но в остальном все то же самое.

  • +1 1

Share this post


Link to post
Share on other sites
burr, все классно ( я как раз это и предлагал) , только...

Человек должен понимать всю ответственность за такие действия.

Share this post


Link to post
Share on other sites

Можно сделать так:

 

system/library/customer.php

 

ocstore 1.5.4.1

 

найти 

if ($override) {
  $customer_query = $this->db->query("SELECT * FROM " . DB_PREFIX . "customer where LOWER(email) = '" . $this->db->escape(strtolower($email)) . "' AND status = '1'");
} else {
  $customer_query = $this->db->query("SELECT * FROM " . DB_PREFIX . "customer WHERE LOWER(email) = '" . $this->db->escape(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'");
}

для использования варианта авторизации "телефон или email" заменить на

if ($override) {
  $customer_query = $this->db->query("SELECT * FROM " . DB_PREFIX . "customer where LOWER(email) = '" . $this->db->escape(strtolower($email)) . "' OR telephone = '" . $this->db->escape(strtolower($email)) . "' AND status = '1'");
} else {
  $customer_query = $this->db->query("SELECT * FROM " . DB_PREFIX . "customer WHERE LOWER(email) = '" . $this->db->escape(strtolower($email)) . "' OR telephone = '" . $this->db->escape(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'");
}

для использования авторизации по номеру телефона

if ($override) {
  $customer_query = $this->db->query("SELECT * FROM " . DB_PREFIX . "customer where telephone = '" . $this->db->escape(strtolower($email)) . "' AND status = '1'");
} else {
  $customer_query = $this->db->query("SELECT * FROM " . DB_PREFIX . "customer WHERE telephone = '" . $this->db->escape(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'");
}

Для ocstore 1.5.5.1 вместо strtolower используется utf8_strtolower, но в остальном все то же самое.

Здравствуйте! Подскажите пожалуйста решение для версии 1.5.3.1

Share this post


Link to post
Share on other sites

burr, все классно ( я как раз это и предлагал) , только...

Человек должен понимать всю ответственность за такие действия.

 

Думаю лучше сделать не телефон - пароль, а телефон и смс код, который будет приходить на введенный номер. Да, это повлечет расходы, но работает очень хорошо много где уже давно.

Share this post


Link to post
Share on other sites

Думаю лучше сделать не телефон - пароль, а телефон и смс код, который будет приходить на введенный номер. Да, это повлечет расходы, но работает очень хорошо много где уже давно.

Тогда можно пускать просто по коду из отправляемого письма, а расходы переложить на плечи почтовика. Благо на них почти везде уже двухфакторная авторизация

Share this post


Link to post
Share on other sites

Можно сделать так:

 

system/library/customer.php

 

ocstore 1.5.4.1

 

найти 

if ($override) {
  $customer_query = $this->db->query("SELECT * FROM " . DB_PREFIX . "customer where LOWER(email) = '" . $this->db->escape(strtolower($email)) . "' AND status = '1'");
} else {
  $customer_query = $this->db->query("SELECT * FROM " . DB_PREFIX . "customer WHERE LOWER(email) = '" . $this->db->escape(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'");
}
для использования варианта авторизации "телефон или email" заменить на

if ($override) {
  $customer_query = $this->db->query("SELECT * FROM " . DB_PREFIX . "customer where LOWER(email) = '" . $this->db->escape(strtolower($email)) . "' OR telephone = '" . $this->db->escape(strtolower($email)) . "' AND status = '1'");
} else {
  $customer_query = $this->db->query("SELECT * FROM " . DB_PREFIX . "customer WHERE LOWER(email) = '" . $this->db->escape(strtolower($email)) . "' OR telephone = '" . $this->db->escape(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'");
}

При использовании такого метода на OpenCart 1.5.6.4 позволяет авторизоваться с любым абсолютно паролем, главное знать email покупателя.

Подскажите пожалуйста верное решение.

Share this post


Link to post
Share on other sites
if ($override) {
  $customer_query = $this->db->query("SELECT * FROM " . DB_PREFIX . "customer where telephone = '" . $this->db->escape(strtolower($email)) . "' AND status = '1'");
} else {
  $customer_query = $this->db->query("SELECT * FROM " . DB_PREFIX . "customer WHERE telephone = '" . $this->db->escape(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'");
}

А при таком способе не работает авторизация за покупателя через меню Админка - Продажи - Покупатели.

Подскажите пожалуйста рабочий способ. Можно:

1) Авторизация с помощью email и пароль или телефон и пароль.

2) Авторизация с помощью телефон и пароль (лучше этот).

 

Спасибо.

Share this post


Link to post
Share on other sites

Нашел, кому интересно вот правильный код:

if ($override) {
$customer_query = $this->db->query("SELECT * FROM " . DB_PREFIX . "customer where (LOWER(email) = '" . $this->db->escape(strtolower($email)) . "' OR telephone = '" . $this->db->escape(strtolower($email)) . "') AND status = '1'");
} else {
$customer_query = $this->db->query("SELECT * FROM " . DB_PREFIX . "customer WHERE *(*LOWER(email) = '" . $this->db->escape(strtolower($email)) . "' OR telephone = '" . $this->db->escape(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'");
}

Share this post


Link to post
Share on other sites

А решение для версии 2.Х такоеже?

 

 

Нашел, кому интересно вот правильный код:

if ($override) {
$customer_query = $this->db->query("SELECT * FROM " . DB_PREFIX . "customer where (LOWER(email) = '" . $this->db->escape(strtolower($email)) . "' OR telephone = '" . $this->db->escape(strtolower($email)) . "') AND status = '1'");
} else {
$customer_query = $this->db->query("SELECT * FROM " . DB_PREFIX . "customer WHERE *(*LOWER(email) = '" . $this->db->escape(strtolower($email)) . "' OR telephone = '" . $this->db->escape(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'");
}

Share this post


Link to post
Share on other sites

На 2.x не работает. Ищу возможные решения данного вопроса. Если у кого-то есть информация, поделитесь пожалуйста. 

 

Работает по паре телефон - пароль.

Edited by on1ine

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
You are posting as a guest. If you have an account, please sign in.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×

Important Information

On our site, cookies are used and personal data is processed to improve the user interface. To find out what and what personal data we are processing, please go to the link. If you click "I agree," it means that you understand and accept all the conditions specified in this Privacy Notice.