Поддержка Проблемы и решения быстрая авторизация

  • Решил организовать на сайте быструю регистрацию, т.е., пользователь вводит email, а ему на почту приходит письмо типа https://site/account?token=WKtwIZ8Hw…glHK_itZM-VPsF
    пользователь переходит по ссылке и попадает в свой аккакунт,
    Как организовать подобную идею?

    поможет ли мне в этом wp_set_auth_cookie()?

    делаю так

    файл function.php

    add_shortcode( 'fast_custom_login', 'fast_login' );
     
    function fast_login() {
     
        $return = '<hr> <h3>Быстрый вход</h3><form method="post" action="http://localhost:8888/wp-content/themes/twentynineteen-parts/templates/php/signon.php " ><div id="gridForm" class="justify-content-center">      <div class="text-center text-muted mb-4">
                    <input  type="text" name="fastlogin" id="fasrlogin" class="form-control" placeholder="Email" size="20">
                  </div> <input type="submit"  id="resetpass-button" class="btn btn-primary " value="Войти"></form>';
         if ( isset( $_REQUEST['errno'] ) ) {
            $error_codes = explode( ',', $_REQUEST['errno'] );
                        foreach ( $error_codes as $error_code ) {
                switch ( $error_code ) {
                    case 'empty_email':
                        $return .= '<span class="badge badge-pill badge-danger">Вы не забыли указать свой email/имя пользователя ?</span>';
                        break;
                    case 'invalid_email':
                        $return .= '<span class="badge badge-pill badge-danger">На сайте не найдено указанного пользователя.</span>';
                        break;
                }
            }
        }  
        return $return;        
    }

    файл signon.php

    <?php
    require_once ($_SERVER['DOCUMENT_ROOT'] . '/wp-load.php');
     
    require_once ($_SERVER['DOCUMENT_ROOT'] . '/wp-admin/includes/upgrade.php');
    global $wpdb;
     
     
     
     
        if ( $_SERVER['REQUEST_METHOD'] === 'POST' ) {
            if ( $_POST['fastlogin']  ) {
     
                $resul = $wpdb->get_results(" SELECT ID FROM <code>wp_users</code> WHERE <code>user_email</code> = '" .$_POST['fastlogin'] . "'");
                
                foreach ($resul as $resul) {
                    nocache_headers();
                    wp_clear_auth_cookie();
                    $set_auth = wp_set_auth_cookie($resul->ID);
                
                    
                    
                }
     
                
                
     
                $login_url = home_url( '/login/' );
                $login_url = add_query_arg( 'errno', $set_auth , $login_url );
                $to = $_POST['fastlogin'];
                $subject = 'Быстрый вход';
                $message = $login_url;
     
                wp_mail( $to, $subject, $message);

    после того как нажимаю кнопку,приходит письмо на почту, но без token ,так как

    wp_set_auth_cookie

    действует только после перезагрузки страницы, потом заново отправляю,уже приходит с токеном, но смысла от этого письма уже нет, так как пользователь и так уже авторизован, так вот ,как сделать что бы приходило сразу письмо с токеном, при этом пока пользователь не перейдет по ссылке,он не авторизуется?
    Спасибо!

Просмотр 2 ответов — с 1 по 2 (всего 2)
  • Модератор SeVlad

    (@sevlad)

    wp.me/3YHjQ

    Как организовать подобную идею?

    Отличается от оригинального поведения ВП только тем, что не надо логиниться и по сути это дыра?
    Но вроде были готовые плагины, которые позволяли в тч и это.
    Более того — если Вы делаете многопользовательскую систему, то плагины для управления юзерами и их возможностями просто необходимы.

    так для между прочим: быстрая авторизация, это когда пользователь вводит на регистрации свой желаемый логин и желаемый пароль и тут же получает доступ к сайту, без всяких заморочек с почтой и токиенами.

Просмотр 2 ответов — с 1 по 2 (всего 2)
  • Тема «быстрая авторизация» закрыта для новых ответов.