热点推荐

查看: 74|回复: 0

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

[复制链接]
  • TA的每日心情
    郁闷
    2022-5-11 17:24
  • 等级头衔

    等級:管理员

    Rank: 9Rank: 9Rank: 9

    积分成就
    UID
    1
    威望
    574
    贡献
    2262
    主题
    1213
    精华
    3
    积分
    3030
    注册时间
    2020-1-22
    最后登录
    2022-5-19

    快捷版块
    版块
    官方交流Q群
    版块
    在线申请友链

    建功伟业

    最佳新人活跃会员热心会员推广达人宣传达人灌水之王突出贡献荣誉管理论坛元老

    发表于 2021-11-25 18:10:45 来自手机 | 显示全部楼层 |阅读模式
    所有带前端用户注册功能的 wordpress 主题中都会遇到这样一个使用场景:用户填写用户名及密码等信息注册成功后,都希望同时能自动登录。
    wordpress-auto-login-function-201712232150.jpg
    那么,怎么实现这个自动登录呢?本文为你分享 2 个自动登录的方法,大家可以自由使用。
    方法一:利用Wp_signon()函数来实现
    介绍下该函数先~
    函数描述:
    根据给定的凭证来验证用户身份。

    用法:
    1. <?php wp_signon( $credentials, $secure_cookie ); ?>
    复制代码


    参数:
    $Credentials
    (数组)(选填)用户的登录信息。注意:如果不填写该项的话,该函数会默认使用$_POST 变量的值(键名为"log", "pwd" 和 "rememberme");

    默认值:无

    $Secure_cookie
    (布尔)(选填)是否使用安全 cookie。

    默认值:无

    返回值:
    (对象)成功的话返回WP_User,失败的话返回WP_Error

    举例:
    将以下代码应用到你的 WordPress 中即可实现自动登录功能:
    1. if (!is_user_logged_in()) {
    2.         $creds = array();        
    3.        $creds['user_login'] = 'www.52qians.com'; // 用户名是 www.52qians.com,自行修改        
    4.        $creds['user_password'] = 'www.52qians.com'; // 密码是 www.52qians.com        
    5.        $creds['remember'] = true;        
    6.        $user = wp_signon( $creds );        
    7. if ( is_wp_error($user) )                
    8. echo $user->get_error_message(); }
    复制代码


    方法二:无需密码的方式
    通过上面的介绍我们可以看出 wp_signon()函数是需要知道用户的用户名及密码的;而现在有种更好的实现方法,不需要知道帐号密码,只需指定用户名即可,实现代码如下:
    1. if (!is_user_logged_in()) {        
    2.       $user_login = 'www.52qians.com'; // 用户名是 www.52qians.com,自行修改
    3.           // 获取用户 id
    4.         $user = get_userdatabylogin($user_login);
    5.         $user_id = $user->ID;
    6.           // 登录
    7.         wp_set_current_user($user_id, $user_login);
    8.         wp_set_auth_cookie($user_id,true);
    9.         do_action('wp_login', $user_login); }
    复制代码


    在这里用到了这个函数:wp_set_auth_cookie(),这个函数的用法跟 wp_signon()函数类似:wp_set_auth_cookie( $user_id, $remember, $secure ),第一个参数是用户 ID,第二个是是否记住用户,第三个是是否启用安全 cookie~

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

    2. 请注意 wp_signon() 函数里的$secure_cookie参数和 wp_set_auth_cookie() 函数里面的$secure参数:请把这 2 个参数留空,不要设置值!龙笑天下在启用 SSL 的时候,就因为设置该参数为false,导致出现了一个奇怪“无解”(找遍了网络都没找到真正的解决方法... 都在说什么 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()。

    该函数如果第 2 个参数如果留空不设置值话,它就会自动判断站点是否启用了 https,从而自动判断是否使用安全 cookie。而我的主题里却把第 2 个参数值定死为 false 了。

    帖子地址: 

    温馨提示:
    1、在资源网里发表的文章仅代表作者本人的观点,与本网站立场无关。
    2、资源网的所有内容都不保证其准确性,有效性,时间性。阅读本站内容因误导等因素而造成的损失本站不承担连带责任。
    3、当政府机关依照法定程序要求披露信息时,本资源网均得免责。
    4、若因线路及非本站所能控制范围的故障导致暂停服务期间造成的一切不便与损失,资源网不负任何责任。
    5、注册会员通过任何手段和方法针对资源网进行破坏,我们有权对其行为作出处理。并保留进一步追究其责任的权利。
    6、 如遇到加密压缩包,默认解压密码为"www.52qians.com",如遇到无法解压的请联系管理员!
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

  • 返回顶部