Регистрация пользователя с последующим автоматическим входом


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 и следующий код в моем functions.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.