확인없이 로그 아웃하는 방법 '정말로 로그 아웃 하시겠습니까?'


13

내가 지금 로그 아웃 할 때 :

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

로그 아웃을 확인해야하는 페이지로 리디렉션됩니다.

로그 아웃 후 확인을 제거하고 홈페이지로 리디렉션하는 방법은 무엇입니까?

답변:


30

이는 체크인중인 URL에 필요한 nonce가 없기 때문에 발생합니다. wp-login.php

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

wp_logout_urlnonce를 포함하여 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())중이며 확인 페이지가 무시되지 않습니다. nonce는 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을 추가하기 만하면됩니다.
NJENGAH

이 유효성 검사를 제거 할 때 보안 상 영향이 있습니까?
rok

@ user1264304 브라우저에로드 된 악성 JS가 로그인 페이지로 리디렉션 할 수 있다고 생각하지만 사용자가 로그 아웃하면됩니다. 실제로 악성 코드는 유효한 nonce 전에 URL을 대체하려고 시도합니다. 다른 사이트가 사용자에게 관계가 있음을 알고 있다고 가정하면 사용자는 다른 사이트로 이동 한 다음 현재 사이트의 로그 아웃 페이지 링크를 갖습니다. 다시, 사용자를 로그 아웃하는 것 외에 다른 결과는 없습니다. 나는 이것을 본 적이 없다. 따라서 귀하의 질문에 대답하기 위해 유효성 검사를 제거하는 데 보안 관련이 있다고 생각하지 않습니다.
TonyG

Err, 너무 많은 리디렉션 ...
Solomon Closson

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();

참조 링크


-2

이것은 /?customer-logout=true끝에 추가하여 나를 위해 일했습니다 .

http://www.website.com/?customer-logout=true

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.