如何在未经确认的情况下注销?“您真的要注销吗?”?


13

现在,当我通过以下方式注销时:

<a href="<?php bloginfo('url'); ?>/wp-login.php?action=logout">Log out</a>

它将我重定向到需要确认注销的页面。

注销后如何消除确认并重定向到主页?

Answers:


31

发生这种情况的原因是,您在URL中缺少了必要的现时值,该值已被检入。 wp-login.php

case 'logout' :
    check_admin_referer('log-out');
    ...

使用wp_logout_url以中检索的URL包括随机数。如果要重定向到自定义URL,只需将其作为参数传递。

<a href="<?php echo wp_logout_url('/redirect/url/goes/here') ?>">Log out</a>

您还可以使用wp_loginout它为您生成包含翻译的链接:

echo wp_loginout('/redirect/url/goes/here')

1
回声wp_loginout( '/重定向/ URL /云/这里')工作正常..
MAYUR Devmurari

1
我正在使用,wp_logout_url( get_permalink())并且没有跳过确认页面。随机数作为URL的一部分生成,但我仍被发送到确认页面
Ralphonz

这里同样的问题:(
Jarmerson

15

如果您不能使用wp_logout_url()功能,则可以使用以下代码关闭此验证:

add_action('check_admin_referer', 'logout_without_confirm', 10, 2);
function logout_without_confirm($action, $result)
{
    /**
     * Allow logout without confirmation
     */
    if ($action == "log-out" && !isset($_GET['_wpnonce'])) {
        $redirect_to = isset($_REQUEST['redirect_to']) ? $_REQUEST['redirect_to'] : 'url-you-want-to-redirect';
        $location = str_replace('&amp;', '&', wp_logout_url($redirect_to));
        header("Location: $location");
        die;
    }
}

替换'url-you-want-to-redirect'为注销后要重定向的URL。

将其添加到您的 functions.php


这适用于未经验证的注销,但不会重定向到我想要的URL。
Phu Nguyen

@PhuNguyen您只需要将重定向URL添加到该代码中的重定向请求中,在冒号后加引号的位置。
新泽西州

删除此验证是否有任何安全隐患?
rok

@ user1264304我相信以某种方式加载到浏览器中的恶意JS可以重定向到登录页面,但要做的就是注销用户。真正的恶意代码可能会尝试在有效的随机数之前替换URL。用户可以导航到另一个站点,然后该站点具有指向当前站点的注销页面的链接-假设另一个站点知道该用户具有关系。同样,除了注销用户外,没有其他后果。我从未见过。因此,回答您的问题,我认为删除验证没有安全隐患。
TonyG '18年

错误,重定向过多...
所罗门·克洛森

3

如果您在菜单中创建了自定义链接,请将标签设置为“Logout”,并将URL设置为http://yourdomain.com/wp-login.php?action=logout。然后将此功能添加到您的functions.php文件中:

function change_menu($items){
  foreach($items as $item){
    if( $item->title == "Logout"){
         $item->url = $item->url . "&_wpnonce=" . wp_create_nonce( 'log-out' );
    }
  }
  return $items;

}
add_filter('wp_nav_menu_objects', 'change_menu');

如果要在注销后重定向到登录页面,则应将登录URL附加为:

$item->url = $item->url . "&_wpnonce=" . wp_create_nonce( 'log-out' ).'&redirect_to='.wp_login_url();

参考链接


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.