Реєстрація користувача з автоматичним входом


15

Я використовую плагін, модифікований для моїх цілей.

Те, що я хочу, - це після того, як користувач зареєструвався для цього, щоб він автоматично входив у систему та повертав їх на поточну сторінку. На даний момент він надсилає їм електронне повідомлення зі своїм ім'ям користувача та паролем. Потім вони повинні увійти, використовуючи ці дані.


ви використовуєте форму реєстрації за замовчуванням або власну?
Bainternet

Індивідуальний, але він заснований на переадресації, тому коди, призначені для роботи з системою за замовчуванням, цілком можуть працювати, і якщо ні, я, ймовірно, можу змінити його.
Робін І лицар

Думаю, я повинен зазначити, що автоматичний вхід користувача при реєстрації обходить частину безпеки входу. Зазвичай користувач не може увійти, не вказавши дійсну адресу електронної пошти. Користувачеві потрібно зареєструватися, отримати електронний лист, а потім увійти. Якщо ви вилучите крок електронної пошти, ваші користувачі можуть зареєструватися підробленими адресами, автоматично входити в систему та мати можливість дістатися до бекенда, коментувати, що б не могли зробити ваші підписники за замовчуванням. Хто б виграв? Спамери, для одного. Хакери також хотіли б розібратися за дірками у вашому бекенді, не потребуючи вказати адресу, яка може виявитись.
s_ha_dum

Відповіді:


10

В основному для входу користувача ви можете використовувати:

            //Login the user
    $creds = array();
    $creds['user_login'] = $login;
    $creds['user_password'] = $password;
    if ( !empty( $remember ) ){ 
        $creds['remember'] = true;
    }
    $user = wp_signon( $creds, true );

але це лише тоді, коли у вас є пароль та логін, щоб ви могли створити власну форму реєстрації та обробити її та створити користувача самостійно

//Only after Everything has been validated, proceed with creating the user
        //Create the user
        $user_pass = wp_generate_password();
        $user = array(
            'user_login' => $username,
            'user_pass' => $user_pass,
            'first_name' => $firstname,
            'last_name' => $lastname,
            'user_email' => $email
        );
        $user_id = wp_insert_user( $user );

        /*Send e-mail to admin and new user - 
        You could create your own e-mail instead of using this function*/
        wp_new_user_notification( $user_id, $user_pass );

і тут у нас є і логін, і пароль, щоб ви могли увійти в систему.

Сподіваюсь, це допомагає


2
Чи не існує фільтр реєстрації, який можна підключити?
Зак

1
Хитрий, я бачу, чи можу я це інтегрувати. Тоді немає простішого шляху. Я вважаю, що wordpress не зацікавлений у наданні приємного get_the_password (), оскільки він надсилає електронні листи.
Робін І лицар

5

Немає ідеального місця, щоб підключитися до процесу реєстрації. Я думаю, що є вагомий випадок, щоб до ядра додати гак дій події реєстрації користувача. Але я думаю, що ти можеш підробити це тим часом. Однією з останніх речей, що трапляються, коли користувач успішно реєструється, - це створення користувацького параметра під назвою 'default_password_nag'. Ми можемо створити дію, щоб спостерігати за цим, і налаштувати користувача, коли він встановлений.

add_action('update_user_metadata', 'my_auto_login', 10, 4);

function my_auto_login( $metaid, $userid, $key, $value ) {
    // We only care about the password nag event. Ignore anything else.
    if ( 'default_password_nag' !== $key  && true !== $value) {
        return;
    }

    // Set the current user variables, and give him a cookie. 
    wp_set_current_user( $userid );
    wp_set_auth_cookie( $userid );
}

Неперевірений, але повинен працювати теоретично.

Тепер, коли у нас є ідея, що робити, я вважаю, що я думаю, що це погана ідея з точки зору безпеки. Люди можуть створювати небажані облікові записи, навіть не переживаючи проблем із налаштуванням спадної скриньки електронної пошти. :)


1
user_register - це дуже приємне місце для підключення, для цього я думаю?
jsims281

1

Щойно мені вдалося отримати цю функціональність за допомогою гачка user_register та наступного коду в своїх функціях.php :

// auto log in a user who has just signed up       
function auto_login_new_user( $user_id ) {
  wp_set_auth_cookie( $user_id, false, is_ssl() );
}
add_action( 'user_register', 'auto_login_new_user' );

Чи потрібно все-таки надіслати електронний лист для підтвердження реєстрації? Я більше не отримую цього.
codecowboy

0
function login_after_register($userlogin,$userpass){
    $credentials = array( 'user_login' =>  $userlogin, 'user_password' => $userpass, 'remember' => true );

    $secure_cookie = is_ssl();

    $secure_cookie = apply_filters('secure_signon_cookie', $secure_cookie, $credentials);
    add_filter('authenticate', 'wp_authenticate_cookie', 30, 3);

    $user = wp_authenticate($credentials['user_login'], $credentials['user_password']);
    wp_set_auth_cookie($user->ID, $credentials["remember"], $secure_cookie);
    do_action('wp_login', $user->user_login, $user);
}

1
Будь ласка, надайте пояснення разом із кодом.
s_ha_dum
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.