腾讯云服务器优惠活动华纳云香港服务器

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

WordPress主题推荐

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

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

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

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

Wp_signon() 函数用法:

  1. <?php wp_signon( $credentials$secure_cookie ); ?>

Wp_signon() 函数参数:

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

Wp_signon() 函数举例:

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

  1. if (!is_user_logged_in()) {
  2.     $creds = array();
  3.     $creds[‘user_login’] = ‘example’; // 用户名是example,自行修改
  4.     $creds[‘user_password’] = ‘plaintextpw’; // 密码是plaintextpw
  5.     $creds[‘remember’] = true;
  6.     if ( isset($_SERVER[‘HTTPS’]) && $_SERVER[‘HTTPS’] === ‘on’ ) {  // 判断站点是否启用SSL
  7.         $user = wp_signon( $creds, true );
  8.     }else{
  9.         $user = wp_signon( $creds, false );
  10.     }
  11.     if ( is_wp_error($user) )
  12.         echo $user->get_error_message();
  13. }

方法二:无需密码的方式

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

  1. if (!is_user_logged_in()) {
  2.     $user_login = ‘example’; // 用户名是example,自行修改
  3.     // 获取用户id
  4.     $user = get_userdatabylogin($user_login);
  5.     $user_id = $user->ID;
  6.     // 登录
  7.     wp_set_current_user($user_id$user_login);
  8.     if ( isset($_SERVER[‘HTTPS’]) && $_SERVER[‘HTTPS’] === ‘on’ ) {  // 判断站点是否启用SSL
  9.         wp_set_auth_cookie($user_id,true,true);
  10.     }else{
  11.         wp_set_auth_cookie($user_id);
  12.     }
  13.     do_action(‘wp_login’, $user_login);
  14. }

特别说明

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 后,因为这个问题,简直想屎的心都有了~~~~~~~~~
赞 (0) 打赏
版权声明:本文为投稿文章,感谢 龙笑天下 的投稿,版权归原作者所有!发布此文是出于传递更多信息之目的,若有来源标注错误或侵犯了您的合法权益,请联系我们,确认后马上更正或删除,谢谢!
wu