WordPress实现用户自动登录的两种方法

WordPress国产主题推荐

所有带前端用户注册功能的 WordPress 主题中都会遇到这样一个使用场景:用户填写用户名及密码等信息注册成功后,都希望同时能自动登录。那么,怎么实现这个自动登录呢?本文为你分享2个自动登录的方法,大家可以自由使用。

WordPress实现用户自动登录的两种方法-第1张-boke112百科(boke112.com)

方法一:利用 Wp_signon() 函数来实现

Wp_signon() 函数描述:根据给定的凭证来验证用户身份。

Wp_signon() 函数用法:

<?php wp_signon( $credentials, $secure_cookie ); ?>

Wp_signon() 函数参数:

  • $Credentials(数组)(选填)用户的登录信息,默认值:无。注意:如果不填写该项的话,该函数会默认使用 $_POST 变量的值(键名为”log”, “pwd” 和 “rememberme”);
  • $Secure_cookie(布尔)(选填)是否使用安全cookie,默认值:无。
  • 返回值:(对象)成功的话返回 WP_User,失败的话返回 WP_Error。

Wp_signon() 函数举例:

将以下代码应用到你的 WordPress 中即可实现自动登录功能:

if (!is_user_logged_in()) {
$creds = array();
$creds['user_login'] = 'example'; // 用户名是example,自行修改
$creds['user_password'] = 'plaintextpw'; // 密码是plaintextpw
$creds['remember'] = true;
$user = wp_signon( $creds );
if ( is_wp_error($user) )
echo $user->get_error_message();
}

方法二:无需密码的方式

通过上面的介绍我们可以看出 wp_signon() 函数是需要知道用户的用户名及密码的,而现在有种更好的实现方法,不需要知道帐号密码,只需指定用户名即可,实现代码如下:

if (!is_user_logged_in()) {
$user_login = 'example'; // 用户名是example,自行修改

// 获取用户id
$user = get_userdatabylogin($user_login);
$user_id = $user->ID;

// 登录
wp_set_current_user($user_id, $user_login);
wp_set_auth_cookie($user_id,true);
do_action('wp_login', $user_login);
}

特别说明

1、如果将方法一或方法二的代码示例,直接放到主题的 functions.php中,那么只要打开前台任何页面,就会自动登录到你设置的用户名 example 下。本文只是提供自动登录的方法,至于怎么使用就得看你具体的需求了。

2、请注意代码中加了这个判断:判断站点是否启用 SSL,这个是非常重要的!龙笑天下在启用 SSL 的时候,就因为没有启用这个判断,导致出现了一个奇怪且无解(找遍了网络都没找到真正的解决方法… 都在说什么 cookie 的路径问题….)的现象,现将该现象描述如下以供遇到同样问题的你来参考:

a.通过主题前台的弹出框输入用户名及密码方式来登录的话,前台能正常登录,前台页面能正常浏览,一切“如常”;让人崩溃的问题就来了:一旦你打开后台页面,你会被强制退出登录,就是进不了 WordPress 的后台。
b.通过 WordPress 的后台默认登录页面(wp-login.php)或者通过社交按钮来登录的话,则能够自由出入前后台。

通过搜索,使用了网上的几乎所有方法,都无果… 只能确认是 cookie的问题~

后来通过比较a和b两种情形的 cookie 发现了问题所在,唯一区别就是:a情形里 cookie 名是:wordpress_396e26512564256ed830cb7909cc751e,b情形里 cookie 名是:wordpress_sec_396e26512564256ed830cb7909cc751e。大家应该发现问题了吧,cookie 名唯一区别就是 sec。最后通过定位主题的登录函数,发现了是这个 wp_signon() 函数的问题。此外,还有一个“可疑”函数:wp_set_auth_cookie()  这个函数的用法跟 wp_signon() 函数类似:wp_set_auth_cookie( $user_id, $remember, $secure ),第一个参数是用户ID,第二个是是否记住用户,第三个是是否启用安全 cookie~

最最后,友情提示主题制作者,一定要注意下这些个小细节啊~ PS:当时启用 https 后,因为这个问题,简直想屎的心都有了~~~~~~~~~
文章创作不易,期待您的评分
版权声明:本文为投稿文章,感谢 龙笑天下 的投稿,版权归原作者所有!发布此文是出于传递更多信息之目的,若有来源标注错误或侵犯了您的合法权益,请联系我们,确认后马上更正或删除,谢谢!
wu