Auto Login After Registration

时间:2015-03-28 作者:user3055211

我希望用户在完成注册表后单击发送的电子邮件中的链接时,能够自动登录,而无需输入用户名和密码。

我该怎么做?

2 个回复
SO网友:butlerblog

这里有一个基本方法。

首先,您需要在链接中传递一些信息,以提供一些用户信息,您可以使用这些信息登录用户。为此,您需要过滤发送给用户的电子邮件。(实际上可以加载自定义的新用户注册电子邮件,但这必须作为插件来完成,因为该功能是一个可插入的功能。与此相反,此方法只是根据注册电子邮件的主题行过滤电子邮件内容。)

//为注册电子邮件正文添加筛选器

add_filter( \'wp_mail\', \'set_up_auto_login_link\' );

function set_up_auto_login_link( $atts ) {

    // if the email subject is "Your username and password"
    if ( isset ( $atts [\'subject\'] ) && $atts[\'subject\'] = \'Your username and password\' ) {
        if ( isset( $atts[\'message\'] ) ) {

            $old = \'/wp-login.php\';
            $new = \'/wp-login.php?user=\' . $_POST[\'user_login\'];

            $atts[\'message\'] = str_replace( $old, $new, $atts[\'message\'] );
        }
    }
    return $atts;
}
这将以添加到登录链接的查询字符串的形式将注册表中选定的用户名放入电子邮件中。当用户单击链接时,可以使用该用户名登录。

为此,我已连接到init操作。这将检查查询字符串中的“user”参数。如果存在,它将使用get\\u user\\u by通过用户名(登录)获取用户数据。如果返回有效用户,我们可以使用用户名和检索到的用户ID登录用户:

add_action( \'init\', \'log_user_in\' );
function log_user_in() {
    if ( isset( $_GET[\'user\'] ) ) {

        // get the username from the URL
        $user_login = $_GET[\'user\'];

        // get the user data (need the ID for login)
        $user = get_user_by( \'login\', $user_login );

        // if a user is returned, log them in
        if ( $user && ! user_can( $user->ID, \'manage_options\' ) ) {
            wp_set_current_user( $user->ID, $user_login );
            wp_set_auth_cookie( $user->ID );
            do_action( \'wp_login\', $user_login );
            wp_redirect( home_url() );
            exit();
        }
    }
}
请注意,此过程不会给您任何真正的安全性,因为任何拥有有效用户名的人都可以作为该用户登录。它会进行检查,以确保登录的用户不是管理员(user\\u can(\'manage\\u options\')),否则任何具有管理员用户登录名的人都可以获得访问权限。明智的做法是加入一些额外的检查——可能还需要创建一个密钥或哈希来添加到链接,这是在注册时完成的,可以用来验证用户。

SO网友:Timama
// Connect auto the new user
    $creds = array();
    $creds[\'user_login\'] = $nom;
    $creds[\'user_password\'] = $pass;
    $creds[\'remember\'] = false;
    $user = wp_signon( $creds, false );
结束

相关推荐

WP_LOGIN_URL不能正常工作

我正在进行一个项目,需要向“管理”菜单添加一个自定义链接,并使用以下代码:$login_url = wp_login_url(); add_options_page(\'Login\', \'Login Page\', \'manage_options\', \'loop.php?url=\'.esc_url($login_url).\'\'); 有件事。上述代码正在将以下URL添加到菜单:http://example.com/wp-admin/loop.php?url=http:/ex