Автоматический вход пользователя после регистрации

9 февр. 2011 г., 20:24:49
Просмотры: 15.7K
Голосов: 17

Я использую модифицированный плагин для своих целей.

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

4
Комментарии

Вы используете стандартную форму регистрации или кастомную?

Bainternet Bainternet
9 февр. 2011 г. 20:46:50

Кастомную, но она основана на редиректах, поэтому код, разработанный для работы со стандартной системой, скорее всего будет работать. А если нет — я смогу его адаптировать.

Robin I Knight Robin I Knight
9 февр. 2011 г. 20:57:35

Должен отметить, что автоматический вход пользователя после регистрации обходит часть системы безопасности. Обычно пользователь не может войти без подтверждения email. Пользователь должен зарегистрироваться, получить письмо и только потом войти. Если убрать шаг с email, ваши пользователи смогут регистрироваться с фальшивыми адресами, автоматически входить в систему и получать доступ к бэкенду, оставлять комментарии или делать всё, что разрешено подписчикам по умолчанию. Кому это выгодно? Спамерам, например. Хакеры тоже были бы рады покопаться в вашем бэкенде в поисках уязвимостей, не оставляя реальных email-адресов, которые могли бы их выдать.

s_ha_dum s_ha_dum
27 мая 2013 г. 02:08:59

Подробный блог: http://sforsuresh.in/auto-login-wordpress/

Suresh Kamrushi Suresh Kamrushi
9 янв. 2018 г. 12:44:01
Все ответы на вопрос 4
2
10

Основной способ авторизации пользователя:

            //Авторизуем пользователя
    $creds = array();
    $creds['user_login'] = $login;
    $creds['user_password'] = $password;
    if ( !empty( $remember ) ){ 
        $creds['remember'] = true;
    }
    $user = wp_signon( $creds, true );

но это работает только когда у вас есть логин и пароль поэтому вы можете создать свою форму регистрации, обработать её и создать пользователя самостоятельно

//Только после успешной валидации всех данных, создаем пользователя
        //Создаем пользователя
        $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 );

        /*Отправляем email администратору и новому пользователю - 
        Вы можете создать свой собственный email вместо использования этой функции*/
        wp_new_user_notification( $user_id, $user_pass );

и здесь у нас уже есть и логин и пароль, поэтому мы можем авторизовать пользователя.

Надеюсь, это поможет

9 февр. 2011 г. 21:39:51
Комментарии

Разве нет фильтра регистрации, к которому можно подключиться?

Zack Zack
9 февр. 2011 г. 22:30:20

Сложный вопрос, посмотрю, смогу ли я это интегрировать. Тогда нет более простого способа. Полагаю, WordPress не заинтересован в предоставлении удобной функции get_the_password(), так как он отправляет пароль по email.

Robin I Knight Robin I Knight
9 февр. 2011 г. 23:00:09
1

Нет идеального места для подключения к процессу регистрации. Думаю, есть веские основания добавить хук действия для регистрации пользователя в ядро WordPress. Но, возможно, можно временно имитировать это. Один из последних шагов при успешной регистрации пользователя — создание опции пользователя с именем 'default_password_nag'. Мы можем создать действие, которое будет следить за этим, и выполнять настройку пользователя, когда опция установлена.

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

function my_auto_login( $metaid, $userid, $key, $value ) {
    // Нас интересует только событие сброса пароля. Игнорируем остальное.
    if ( 'default_password_nag' !== $key  && true !== $value) {
        return;
    }

    // Устанавливаем текущего пользователя и выдаём ему куки.
    wp_set_current_user( $userid );
    wp_set_auth_cookie( $userid );
}

Не тестировалось, но в теории должно работать.

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

25 февр. 2011 г. 00:06:09
Комментарии

user_register — это довольно удобное место для подключения хука, как ты думаешь?

jsims281 jsims281
2 сент. 2011 г. 13:28:20
1

Мне удалось реализовать эту функциональность с помощью хука user_register и следующего кода в файле functions.php:

// автоматический вход для только что зарегистрированного пользователя       
function auto_login_new_user( $user_id ) {
  wp_set_auth_cookie( $user_id, false, is_ssl() );
}
add_action( 'user_register', 'auto_login_new_user' );
2 сент. 2011 г. 13:15:41
Комментарии

Должно ли это по-прежнему отправлять email для подтверждения регистрации? Я больше не получаю его.

codecowboy codecowboy
27 сент. 2011 г. 11:37:16
1
function login_after_register($userlogin,$userpass){
    // Авторизация пользователя сразу после регистрации
    $credentials = array( 
        'user_login' => $userlogin,    // Логин пользователя
        'user_password' => $userpass,  // Пароль пользователя
        'remember' => true             // Запомнить пользователя
    );

    // Проверка SSL соединения
    $secure_cookie = is_ssl();

    // Фильтр для безопасных cookie авторизации
    $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']);
    // Установка cookie авторизации
    wp_set_auth_cookie($user->ID, $credentials["remember"], $secure_cookie);
    // Действие после авторизации
    do_action('wp_login', $user->user_login, $user);
}
27 мая 2013 г. 00:52:49
Комментарии

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

s_ha_dum s_ha_dum
27 мая 2013 г. 01:47:59