WordPress用户注册成功后自动登录

WordPress自定义用户注册页面插件,介绍了如何让用户在注册时自行填写密码,而无需接收邮件来获取密码。既然用户都知道自己的密码了,那我们再配合之前的教程:WordPress实现用户自动登录,让用户注册成功后自动登录,并跳转到指定页面,即让用户省了手动登录这一步,又提高了用户体验。

在我的设置,主要网站具有基于角色的权限和 WordPress 安装只有每个角色的一个帐户(即管理员,编辑,用户等)。该插件检查用户登录到网站,然后模拟一个 WordPress 随时登录用户导航到博客的作用。你应该能够为自己的需要定制方法

利用 wp_signon() 模拟用户登陆

function auto_login() {
    if (!is_user_logged_in()) {
        //确定 WordPress 用户帐户来模拟
        $user_login = 'guest'; 
 
        //获得用户密码
        $user = new WP_User(0, $user_login);
        $user_pass = md5($user->user_pass); 
 
        //登录并设置 cookies,设置当前用户
        wp_login($user_login, $user_pass, true);
        wp_setcookie($user_login, $user_pass, true);
        wp_set_current_user($user->ID, $user_login);
    }
}
add_action('init', 'auto_login');

将上述代码放到 functions.php 里面即可实现自动登陆

对于细心的读者附加说明和注意事项

  1. 有一个 wp-include/pluggable.php 文件定义了所有你可以重写钩入功能。WordPress 的 API 文档,尚不够深入,因此您可能需要认真检查实际的代码。
  2. WordPress 使用的密码是经过负责 MD5 哈希加密过的。在数据库中,密码存储在一个单一的 hashed。我们需要加密密码之前将它传递到 wp_login() 功能(设置表明密码已经过加密运算第三个参数)。显然硬编码的实际密码将会是一大禁忌。

无密码登陆

现在有种更好的实现方法,不需要知道帐号密码,只需指定用户名即可,实现代码如下:

function auto_login() {
	if (!is_user_logged_in()) {
		//确定WordPress用户帐户来模拟
		$user_login = 'guest';
		//获取用户的ID 
		$user = get_userdatabylogin($user_login);
		$user_id = $user->ID;
		//登录
		wp_set_current_user($user_id, $user_login);
		wp_set_auth_cookie($user_id);
		do_action('wp_login', $user_login);
	}
}
add_action('init', 'auto_login');

上面的两个代码,放到任意 PHP 文档里面,都会实现 WordPerss 用户自动登陆,至于是需要更安全的登陆方式,就需要管理员自己斟酌了!

发表评论

Crypto logo

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus cursus rutrum est nec suscipit. Ut et ultrices nisi. Vivamus id nisl ligula. Nulla sed iaculis ipsum.

Contact

Company Name

Address