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

投稿   龙笑天下  2017-12-27 07:38:16  216 人阅读  23 条评论

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

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

方法一:利用 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 后,因为这个问题,简直想屎的心都有了~~~~~~~~~

历史上的今天:

如果文章对你有帮助,请赞赏支持作者继续创作!

文章标签: ,   ,  
原文地址:https://www.ilxtx.com/wordpress-auto-login-function.html
温馨提示:文章内容仅代表作者个人观点,不代表boke112导航赞同其观点和对其真实性负责!
版权声明:本文为投稿文章,感谢 龙笑天下 的投稿,版权归原作者所有,欢迎分享本文,转载请保留出处!

 发表评论


  1. 老鹰主机
    老鹰主机 【小白】 @回复

    技术性太强,看不懂,只能给点赞了

  2. 西枫里博客
    西枫里博客 【进士】 @回复

    稿件质量很高啊。资磁一下 [赞]

  3. 春熙路
    春熙路 【书童】 @回复

    博主最近二天不是挺忙的、还在更新啊

    • 懿古今
      懿古今【村长】2017-12-27 22:49  回复

      @春熙路[嘻嘻] 投稿文章都是提前编辑好定时发布的,晚上偶尔有空就更新一下

  4. 亦枫博客
    亦枫博客 【小白】 @回复

    很实用,赞一个

  5. 美词创意设计
    美词创意设计 @回复

    很实用的技巧,感谢分享!

  6. 你的阿泰叔叔啊
    你的阿泰叔叔啊 【秀才】 @回复

    虽然没用WP还是看看,说不定啥时候就转WP了

  7. 小萝博客
    小萝博客 【书童】 @回复

    为啥要登陆呢?感觉太麻烦了

  8. 罗莱家纺
    罗莱家纺 【小白】 @回复

    不错感谢分享

  9. Mr.Li
    Mr.Li 【秀才】 @回复

    好多路过的群众

  10. 历史趣谈
    历史趣谈 【秀才】 @回复

    技术性太强,看不懂,只能给点赞了

  11. 前端氪
    前端氪 【小白】 @回复

    Typecho不折腾

  12. 狂放
    狂放 【进士】 @回复

    我就是路过的,压根就没想过开放注册

  13. 80后记忆
    80后记忆 【举人】 @回复

    我就看看,太高深,代码小白一个。

  14. 99八十一
    99八十一 【举人】 @回复

    厉害了我的哥,真能折腾啊!

  15. 银色月航
    银色月航 【进士】 @回复

    一般保存cookies,就可以登录了吧?

    • 龙笑天
      龙笑天 作者回复2017-12-27 09:50  回复

      @银色月航函数用法不当 虽然有cookie 但是不对的~ [挖鼻屎]

  16. 沈唁志
    沈唁志 【进士】 @回复

    没开放前台注册

  17. 吃货小栈
    吃货小栈 【小白】 @回复

    纯路过,就是过来支持一下龙龙的!

  18. 学习笔记Blog
    学习笔记Blog 【进士】 @回复

    Typecho 博客淡定的飘过!从来没有考虑过这种事儿!

  19. 万正远洋
    万正远洋 【小白】 @回复

    一直不喜欢 WordPress 的用户注册登陆!

    • 明月登楼
      明月登楼 【尚书】2017-12-27 08:24  回复

      @万正远洋是的,论坛是怎么死的,就是因为需要注册和登陆!

  20. 银色月航
    银色月航 【进士】 @回复

    传说中的沙发