使用`auth_reDirect`:即使我已经登录,也一直要求我登录

时间:2013-01-28 作者:Fabien Quatravaux

我正在尝试使用auth_redirect 在访问特定页面时自动重定向未登录的访问者。以下是我使用的代码:

add_action(\'template_redirect\',\'wpse16975_check_if_logged_in\');
function wpse16975_check_if_logged_in(){
    $pageid = 29;
    if(is_page($pageid)) auth_redirect();
}
重定向工作正常(我看到了登录页面),但当我登录时,我又看到了登录页面。无法访问受保护的页面,因为浏览器不断将其重定向到登录页面。

我看到了this question and its answer 从@chrisguitarguy并将我的代码修改为:

add_action(\'template_redirect\',\'wpse16975_check_if_logged_in\');
function wpse16975_check_if_logged_in(){
    $pageid = 29;
    if(!is_user_logged_in() && is_page($pageid)) {
    $url = add_query_arg(
        \'redirect_to\',
        get_permalink($pageid),
        site_url(\'wp-login.php\')
    );
    wp_redirect($url);
    exit;
}
这段代码解决了我的问题:登录用户现在可以访问该页面。问题是:为什么不能简单地使用auth_redirect ?

4 个回复
最合适的回答,由SO网友:Fabien Quatravaux 整理而成

问题是此函数通常在后端使用。要在前端使用它,需要添加以下过滤器:

add_filter( \'auth_redirect_scheme\', \'wpse16975_check_loggedin\' );
function wpse16975_check_loggedin(){
    return \'logged_in\';
}
那么auth_redirect() 将按预期工作:如果用户未登录,请将其重定向到登录表单。

SO网友:alec

请参见的末尾this

if (! is_user_logged_in())
    auth_redirect();

SO网友:G H

问题是,你让自己陷入了一个循环。您的原始代码块表示,如果我访问此页面,请将我发送到登录页面。登录后,它会返回到该页面,因为您现在正在访问该页面,请转到登录页面。你转啊转啊!

新块首先检查您是否登录。如果没有,那么,也只有这样,它才会查看您正在访问的页面。如果您没有登录,那么您将被发送到那里,并在登录后返回。现在,由于您已登录,您可以看到该页面。

有意义吗?

SO网友:RyanPaul.ca

仅在移动设备上使用auth\\u redirect()时出现问题。

四天后,我编写了一个有效的解决方案,不需要auth\\u重定向。

global $wp;
$current_url = add_query_arg( $wp->query_string, \'\', home_url( $wp->request ) );
if( !is_user_logged_in() ) { wp_redirect( home_url() . \'/wp-login.php?redirect_to=\'. $current_url );

结束

相关推荐

提交表单后WP_REDIRECT不起作用

我在插入帖子后使用此重定向。它不工作,只刷新表单所在的页面。我知道$pid正在获取帖子ID,那么问题是什么?这是我处理表单提交的php代码的最后一部分。$pid = wp_insert_post($new_post); update_post_meta($pid,\'domain\',$domain); update_post_meta($pid,\'keywords\',$keywords); wp_redirect( get_permalink($pid)