Làm cách nào để đăng xuất mà không cần xác nhận 'Bạn có thực sự muốn đăng xuất không? "?


13

Ngay bây giờ khi tôi đăng xuất qua:

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

nó chuyển hướng tôi đến trang mà tôi cần xác nhận đăng xuất.

Làm cách nào để loại bỏ xác nhận và chuyển hướng đến trang chủ sau khi đăng xuất?

Câu trả lời:


30

Điều này xảy ra bởi vì bạn đang thiếu thông tin không cần thiết trong URL đang được kiểm tra wp-login.php

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

Sử dụng wp_logout_urlđể truy xuất URL bao gồm cả nonce. Nếu bạn muốn chuyển hướng đến một URL tùy chỉnh, chỉ cần chuyển nó dưới dạng đối số.

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

Bạn cũng có thể sử dụng wp_loginoutđể tạo liên kết cho bạn bao gồm cả bản dịch:

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

1
echo wp_loginout ('/ redirect / url / go / here') đang hoạt động tốt ..
Mayur Devmurari

1
Tôi đang sử dụng wp_logout_url( get_permalink())và trang xác nhận không được bỏ qua. Số nonce được tạo như một phần của URL nhưng tôi vẫn được gửi đến trang xác nhận
Ralphonz 17/12/18

Vấn đề tương tự ở đây :(
Jarmerson

15

Nếu bạn không thể sử dụng wp_logout_url()chức năng, Bạn có thể tắt xác thực này bằng mã này:

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;
    }
}

Thay thế 'url-you-want-to-redirect'bằng URL bạn muốn chuyển hướng sau khi đăng xuất.

Thêm nó vào functions.php


Điều này hoạt động để đăng xuất mà không cần xác nhận, nhưng nó không chuyển hướng đến url tôi muốn.
Phú Nguyên

@PhuNguyen Bạn chỉ cần thêm URL chuyển hướng vào yêu cầu chuyển hướng trong mã đó có dấu ngoặc kép '', sau dấu hai chấm.
NJENGAH

Có bất kỳ ý nghĩa bảo mật để loại bỏ xác nhận này?
rok

@ user1264304 Tôi tin rằng JS độc hại bằng cách nào đó được tải vào trình duyệt có thể chuyển hướng đến trang đăng nhập, nhưng tất cả những gì sẽ làm là đăng xuất người dùng. Mã độc thực sự có thể sẽ tìm cách thay thế URL trước khi mở một hợp lệ. Người dùng có thể điều hướng đến một trang web khác có liên kết trang đăng xuất của trang hiện tại - giả sử trang kia biết rằng người dùng có mối quan hệ. Một lần nữa, không có hậu quả nào khác ngoài việc đăng xuất người dùng. Tôi chưa bao giờ thấy điều này. Vì vậy, để trả lời câu hỏi của bạn, tôi không nghĩ có một hàm ý bảo mật để loại bỏ xác nhận.
TonyG

Err, Quá nhiều chuyển hướng ...
Solomon Closson

3

Nếu bạn tạo một liên kết tùy chỉnh trong menu của mình, hãy đặt nhãn thành “Logout”và đặt URL thành http://yourdomain.com/wp-login.php?action=logout. Sau đó thêm chức năng này vào functions.phptập tin của bạn :

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

Nếu bạn muốn chuyển hướng đến trang đăng nhập sau khi đăng xuất thì bạn nên thêm URL đăng nhập là:

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

Liên kết tham khảo


-2

Điều này làm việc cho tôi bằng cách thêm /?customer-logout=truevào cuối.

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

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.