Đăng ký người dùng theo sau là đăng nhập tự động


15

Tôi đang sử dụng một plugin được sửa đổi cho mục đích của tôi.

Những gì tôi đang theo là sau khi người dùng đã đăng ký để tự động đăng nhập và đưa họ trở lại trang hiện tại. Tại thời điểm này, họ sẽ gửi cho họ một email với tên người dùng và mật khẩu của họ. Sau đó họ phải đăng nhập bằng những chi tiết đó.


bạn đang sử dụng mẫu đăng ký mặc định hay tùy chỉnh?
BaiNET

Một tùy chỉnh nhưng nó dựa trên các chuyển hướng để các mã được thiết kế để hoạt động với hệ thống mặc định có thể hoạt động tốt và nếu không tôi có thể sửa đổi nó thành.
Hiệp sĩ Robin I

Tôi nghĩ rằng tôi nên chỉ ra rằng việc tự động đăng nhập người dùng khi đăng ký phá vỡ một phần bảo mật đăng nhập. Thông thường, người dùng không thể đăng nhập mà không cung cấp địa chỉ email hợp lệ. Người dùng cần đăng ký, nhận email, sau đó đăng nhập. Nếu bạn xóa bước email, người dùng của bạn có thể đăng ký bằng địa chỉ giả, được đăng nhập tự động và có thể truy cập vào phần phụ trợ, nhận xét, bất cứ điều gì người đăng ký mặc định của bạn có thể làm. Ai sẽ được lợi? Kẻ gửi thư rác, cho một. Tin tặc cũng thích chọc vào lỗ hổng trong phần phụ trợ của bạn mà không cần phải cung cấp địa chỉ có thể tiết lộ.
s_ha_dum

Câu trả lời:


10

Về cơ bản để đăng nhập người dùng, bạn có thể sử dụng:

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

nhưng đó chỉ là khi bạn có mật khẩu và đăng nhập để bạn có thể tạo biểu mẫu đăng ký của riêng mình và xử lý nó và tự tạo người dùng

//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 );

và ở đây chúng tôi có cả đăng nhập và mật khẩu để bạn có thể đăng nhập người dùng.

Hi vọng điêu nay co ich


2
Không có bộ lọc đăng ký có thể được nối?
Zack

1
Tricky, Ill xem tôi có thể tích hợp nó không. Không có cách nào dễ dàng hơn sau đó. Tôi cho rằng wordpress không quan tâm đến việc cung cấp một get_the_password () tiện lợi khi nó gửi email.
Hiệp sĩ Robin I

5

Không có một nơi lý tưởng để tham gia vào quá trình đăng ký. Tôi nghĩ rằng có một trường hợp mạnh mẽ để thêm một móc hành động sự kiện đăng ký người dùng vào cốt lõi. Nhưng tôi nghĩ rằng bạn có thể giả mạo nó trong thời gian đó. Một trong những điều cuối cùng xảy ra khi người dùng đăng ký thành công, là việc tạo tùy chọn người dùng có tên 'default_password_nag'. Chúng ta có thể tạo một hành động để theo dõi điều đó và thiết lập người dùng khi thiết lập.

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 );
}

Chưa được kiểm tra, nhưng nên làm việc, theo lý thuyết.

Bây giờ chúng tôi có một ý tưởng phải làm gì, tôi sẽ nói rằng tôi nghĩ đây là một ý tưởng tồi, bảo mật. Mọi người có thể tạo tài khoản rác mà không cần phải trải qua sự cố khi thiết lập một hộp thư rác. :)


1
user_register là một nơi khá tốt để kết nối, tôi nghĩ sao?
jsims281

1

Tôi vừa mới quản lý để nhận được rằng chức năng làm việc bằng cách sử dụng móc user_register và đoạn mã sau vào tôi 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' );

Điều này vẫn nên gửi một email để xác nhận đăng ký? Tôi không còn nhận được điều này.
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
Vui lòng cung cấp giải thích cùng với mã của bạn.
s_ha_dum
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.