Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wordpress WP使用查询字符串键自动登录_Wordpress_Autologin - Fatal编程技术网

Wordpress WP使用查询字符串键自动登录

Wordpress WP使用查询字符串键自动登录,wordpress,autologin,Wordpress,Autologin,我正在尝试为订阅者创建一种功能,即在网站URL中附加一个唯一的密钥,以自动登录。我使用ACF将密钥文本添加到用户详细信息页面,密钥存储在_usermeta表中。我可以自动登录。但是,当我转到登录页以外的页面时,根据$current_user对象的echo,登录名似乎更改为我的登录名 为了进行测试,我使用了一个注销的Safari浏览器(我从未使用过)。在查询字符串中使用带有特殊键的URL登录用户,并在回显这些值时显示正确的用户名和id 查询字符串如下所示: 这是我的密码: 函数自动登录(){

我正在尝试为订阅者创建一种功能,即在网站URL中附加一个唯一的密钥,以自动登录。我使用ACF将密钥文本添加到用户详细信息页面,密钥存储在_usermeta表中。我可以自动登录。但是,当我转到登录页以外的页面时,根据$current_user对象的echo,登录名似乎更改为我的登录名

为了进行测试,我使用了一个注销的Safari浏览器(我从未使用过)。在查询字符串中使用带有特殊键的URL登录用户,并在回显这些值时显示正确的用户名和id

查询字符串如下所示:

这是我的密码:

函数自动登录(){
$user\u key=$\u GET['k'];
全球$wpdb;
$user\u id=$wpdb->get\u var(“从wp\u usermeta中选择user\u id,其中meta\u value='”“$user\u key.”);
wp\u set\u当前用户($user\u id);
wp_set_auth_cookie($user_id);
全局$当前用户;
$user=”“;
获取_currentuserinfo();
$user=$current\u user->user\u login;
//echo$user;
}

添加_操作('init','auto_login')尝试使用加载的
插件
操作。如果用户已经登录,则功能
wp\u set\u current\u user
也将失败,因此您应该检查一下。再次验证,
$wpdb->get_var
可能会返回
null
,如果没有找到任何内容。为了安全起见,您应该转义SQL,尤其是在处理登录时,并且该语句很容易被操纵

function auto_login() {
    if (is_user_logged_in())
        return;

    $user_key = $_GET['k'];

    global $wpdb;
    $user_id = $wpdb->get_var($wpdb->prepare("SELECT user_id FROM wp_usermeta WHERE meta_value = %s", $user_key));

    if (isset($user_id)) {
        wp_set_current_user($user_id);
        wp_set_auth_cookie($user_id);

        global $current_user;
        $user = "";
        get_currentuserinfo();
        $user = $current_user->user_login;
        //echo $user;
    }
}

add_action('plugins_loaded', 'auto_login');

如果有用的话,下面是我想出的代码。唯一剩下的问题是cookie方法似乎设置了浏览会话的时间限制,这对我来说不是问题。我将不得不研究如何延长cookie时间。否则,这段代码可能对其他做同样事情的人有用:

函数自动登录(){
如果(用户是否已登录){
返回;
}否则{
如果($_GET['k'])){
$user\u key=$\u GET['k'];
全球$wpdb;
$sql=$wpdb->prepare(“从wp_usermeta中选择user_id,其中meta_值=%s”,$_GET['k']);
$user\u id=$wpdb->get\u var($sql);
if($user\u id){
wp\u set\u当前用户($user\u id);
wp_set_auth_cookie($user_id);
}否则{
//带有消息/电子邮件链接的警报条带div
}
//仅用于测试上述代码
如果($_GET['k'])){
echo$user\u id;
echo$sql;
如果(是错误($user))
echo$user->get_error_message();
}
}
}
}

添加_操作('init','auto_login')
在查看pluggable.php时,似乎与$current_user发生了冲突,因为wp_set_current_user也使用它。但是,当我将全局$current_user行删除到//echo$user行时,我仍然会得到相同的行为:我可以使用包含查询字符串k=值的URL回显正确的用户id,但是单击第二个页面会切换到我的登录,即使我没有登录,并且我已经删除了与此域相关的所有cookie。是的,在代码运行之前,我没有添加任何类似登录检查的内容。您是否确定select查询需要$wpdb->prepare?文档仅显示更新和插入。欣赏插件加载的动作创意。但是,它不会回显用于测试的值。它并没有解决问题,我的登录信息覆盖了使用wp_set_current_user和wp_set_auth_cookie设置的任何内容。实际上,cookie函数似乎不起作用。不过,目前还不清楚这是否是因为WP或Safari和Chrome浏览器中的其他原因,即使在我注销时,也会退出浏览器。再次感谢您的帮助。我找到了另一台机器,用我的网络浏览器证明了这是我电脑上的一个问题。欣赏插件加载操作的想法,以及在调用代码时要优化的一些包装器代码。