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

投稿  龙笑天下   2017-12-27 7:38:16 发布  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 后,因为这个问题,简直想屎的心都有了~~~~~~~~~
温馨提示:文章内容仅代表作者个人观点,不代表boke112联盟赞同其观点和对其真实性负责!
版权声明:本文为投稿文章,感谢 龙笑天下 的投稿,版权归原作者所有!发布此文是出于传递更多信息之目的,若有来源标注错误或侵犯了您的合法权益,请与老古(QQ:2226524923)联系,老古将及时更正、删除,谢谢!
文章标签: ,   ,   ,  更多热门标签>>

您可能感兴趣的文章

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

龙笑天下
  1. 天鸡部落
    天鸡部落

    上面的代码方法并没有看懂,比如第一个,看着像是预设了一个用户名密码一样,还是理解不了。我前面也在折腾这个问题,在网络上是找到了一个可以实现注册后马上自动登陆上的代码。

    主题的functions.php第一个
    <?php 下面添加以下php代码:
    // 用户注册成功后自动登录,并跳转到指定页面
    function auto_login_new_user( $user_id ) {
    wp_set_current_user($user_id);
    wp_set_auth_cookie($user_id);
    // 这里设置的是跳转到首页,要换成其他页面
    // 可以将home_url()改成你指定的URL
    wp_redirect( home_url() );
    exit;
    }
    add_action( ‘user_register’, ‘auto_login_new_user’ );

    然后就碰到了问题,确实是登陆上了,可当退出账号后,发现用原来设置的密码登陆不上了。就好像这个代码无形中改变了密码一样。然后就一直搁置了。
    看很多使用wp建站的网站,里面是集成了填写账号密码信息后马上登陆好的功能。免邮件确认,免注册后重新输入账号密码。

    • 懿古今
      懿古今2019-08-13 23:05

      @天鸡部落[思考] 这个问题建议直接跟文章作者联系和讨论会更好,我倒是没有试过这些代码

  2. 老鹰主机
    老鹰主机

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

  3. 西枫里博客
    西枫里博客

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

  4. 春熙路
    春熙路

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

    • 懿古今
      懿古今2017-12-27 22:49

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

  5. 亦枫博客
    亦枫博客

    很实用,赞一个

  6. 美词创意设计
    美词创意设计

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

  7. 你的阿泰叔叔啊
    你的阿泰叔叔啊

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

  8. 小萝博客
    小萝博客

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

  9. 罗莱家纺
    罗莱家纺

    不错感谢分享

  10. Mr.Li
    Mr.Li

    好多路过的群众

  11. 历史趣谈
    历史趣谈

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

  12. 前端氪
    前端氪

    Typecho不折腾

  13. 狂放
    狂放

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

  14. 80后记忆
    80后记忆

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

  15. 99八十一
    99八十一

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

  16. 银色月航
    银色月航

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

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

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

  17. 沈唁志
    沈唁志

    没开放前台注册

  18. 吃货小栈
    吃货小栈

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

  19. 学习笔记Blog
    学习笔记Blog

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

  20. 万正远洋
    万正远洋

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

  21. 银色月航
    银色月航

    传说中的沙发