用户注册后自动登录


15

我正在使用为我的目的而修改的插件。

我要的是用户注册后自动登录并返回到当前页面。目前,它会向他们发送一封包含用户名和密码的电子邮件。然后,他们必须使用这些详细信息登录。


您使用的是默认注册表格还是自定义表格?
Bainternet'2

一种自定义代码,但是它基于重定向,因此设计用于默认系统的代码可能很好用,如果没有,我可能可以对其进行修改。
罗宾一世骑士

我想我应该指出,在注册时自动登录用户会规避登录安全性。通常,用户必须提供有效的电子邮件地址才能登录。用户需要注册,接收电子邮件,然后登录。如果您删除了电子邮件步骤,则您的用户可以使用伪造的地址进行注册,可以自动登录,并且可以使用默认订户可以进行的后端评论。谁会受益?垃圾邮件发送者,一个。黑客也很乐意四处寻找后端漏洞,而不必提供可能会泄露的地址。
s_ha_dum 2013年

Answers:


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
是否没有可以钩住的注册过滤器?
Zack

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 2011年

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 2013年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.