Можно ли сформировать ссылку для логина при клике на ссылку

Тема в разделе "Общие вопросы", создана пользователем Opeser, 1 фев 2023.

  1. Opeser

    Opeser Новичок

    Сообщения:
    29
    Симпатии:
    0
    Можно ли как-то сформировать в письме ссылку вместе с логином и паролем для Opencart 3.02, чтобы при клике на ссылку пользователь сразу логинился? Если да, то в каком формате она должна быть?
     
  2. Ravilr

    Ravilr Специалист

    Сообщения:
    3.883
    Симпатии:
    1.065
    Сделать то можно, но кто будет делать? Сейчас авторизация идет через post запрос. Переделать нужно на get и тогда будет работать.
     
  3. Opeser

    Opeser Новичок

    Сообщения:
    29
    Симпатии:
    0
    Т.е. я правильно понял, что как стоит по дефаулту в Opencart такую рабочую ссылку не сформировать и такое будет работать если только код переписывать?
     
  4. Ravilr

    Ravilr Специалист

    Сообщения:
    3.883
    Симпатии:
    1.065
    В общем повторяем и проверяем.

    \catalog\controller\account\login.php

    меняем это
    Код:
    if (($this->request->server['REQUEST_METHOD'] == 'POST') && $this->validate()) {
    на это
    PHP:
            if (($this->request->server['REQUEST_METHOD'] == 'POST' && $this->validate()) || (isset($this->request->get['email']) && $this->validateget())) {

    а перед этим
    Код:
        protected function validate() {
    добавим это
    PHP:
        protected function validateget() {
            
    // Check how many login attempts have been made.
            
    $login_info $this->model_account_customer->getLoginAttempts($this->request->get['email']);

            if (
    $login_info && ($login_info['total'] >= $this->config->get('config_login_attempts')) && strtotime('-1 hour') < strtotime($login_info['date_modified'])) {
                
    $this->error['warning'] = $this->language->get('error_attempts');
            }

            
    // Check if customer has been approved.
            
    $customer_info $this->model_account_customer->getCustomerByEmail($this->request->get['email']);

            if (
    $customer_info && !$customer_info['status']) {
                
    $this->error['warning'] = $this->language->get('error_approved');
            }

            if (!
    $this->error) {
                if (!
    $this->customer->login($this->request->get['email'], $this->request->get['password'])) {
                    
    $this->error['warning'] = $this->language->get('error_login');

                    
    $this->model_account_customer->addLoginAttempt($this->request->get['email']);
                } else {
                    
    $this->model_account_customer->deleteLoginAttempts($this->request->get['email']);
                }
            }

            return !
    $this->error;
        }

    Возможно что то не так, по быстрому накидал, проверил, работает.

    логинюсь по ссылки вида http://сайт/account/login?email=ra@ra.ru&password=12345

    А вот ссылку для письма, регистрацию.. как нибудь сами. В симпле вроде регистрирует и отправляет данные на почту. Отредактируйте письмо и будет работать.
     
    Opeser нравится это.
  5. devimirochnik

    devimirochnik Продвинутый пользователь

    Сообщения:
    753
    Симпатии:
    101
    Добавлю свои 5 копеек. Я бы только не открывал в чистом виде почту и пароль. Обычное решение делают следующим образом. Добавляют табличку, где формируют какой-нибудь цифробуквенный код. Этому коду соответствует почта и пароль, а так же время действия кода (скажем, неделя/месяц/полгода/год). Отправляете пользователю ссылку с кодом. Если жмакает, то при логине происходит подтягивание пароля и почты, ну и, собственно, дальше аналогичный код как прислал Ravilr, только из get берётся код и простым sql-запросом проверяется в табличке.
     
  6. Opeser

    Opeser Новичок

    Сообщения:
    29
    Симпатии:
    0
    Спасибо большое! Только в данном случае речь идёт о проекте, на котором я код не смогу поменять, у меня нет доступа к коду, я делаю лишь определённую работу с клиентами на этом проекте. Я делаю в админке пробный аккаунт для клиента и высылаю ему логин, пароль и ссылку для входа. Но было бы проще, если бы по ссылке он сразу логинился, если бы такую ссылку как-то можно было бы сформировать. Но, как я понял, без изменения кода это сделать нереально.
     
  7. devimirochnik

    devimirochnik Продвинутый пользователь

    Сообщения:
    753
    Симпатии:
    101
    Нуууууууууууу, вы можете сделать отдельную страничку, которая обязательно должна быть внутри сайта и которая будет перенаправлять параметры с режимом post, скажем, с помощью jQuery в страничку login.php
     
    Opeser нравится это.
  8. devimirochnik

    devimirochnik Продвинутый пользователь

    Сообщения:
    753
    Симпатии:
    101
    Открытие ссылки это всегда get запрос, поэтому либо переписывать код, либо добавлять страничку, которая будет делать post запрос
     
  9. Opeser

    Opeser Новичок

    Сообщения:
    29
    Симпатии:
    0
    Благодарю за поиск решения, но если я правильно понял, то таки на сам сайт что-то нужно загружать или менять код. Но такой возможности у меня нет т.к. у меня нет FTP доступа к нему. Если таки как-то можно сделать без каких-то изменений на самом сайте, то я бы поговорил о том, чтобы заказать подобное решение. А если такое невозможно, то что ж, придётся мне смириться и работать по-старому.
     
  10. devimirochnik

    devimirochnik Продвинутый пользователь

    Сообщения:
    753
    Симпатии:
    101
    Ну, в принципе, можно просто написать отдельный ocmod для странички login.php и там если в параметрах get параметры, то JS скриптом их вставлять в форму и делать post формы. В таком случае доступ к фтп не нужен, так как окмод можно установить через админку. Но, это если форму логина никто не менял.
     
    Opeser нравится это.
  11. Opeser

    Opeser Новичок

    Сообщения:
    29
    Симпатии:
    0
    Эээх, у меня и в админку доступ очень ограниченный и доступа к расширениям нет :-( Спасибо за участие, но видно не судьба...