วิธีออกจากระบบโดยไม่มีการยืนยัน 'คุณต้องการออกจากระบบจริงหรือไม่? "


13

ตอนนี้เมื่อฉันออกจากระบบผ่าน:

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

มันนำฉันไปยังหน้าที่ฉันต้องการยืนยันการออกจากระบบ

จะกำจัดคำยืนยันและเปลี่ยนเส้นทางไปยังหน้าแรกหลังจากออกจากระบบได้อย่างไร

คำตอบ:


31

สิ่งนี้เกิดขึ้นเนื่องจากคุณไม่มีข้อมูลที่ไม่จำเป็นใน URL ซึ่งกำลังตรวจสอบอยู่ wp-login.php

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

ใช้wp_logout_urlเพื่อเรียกคืน URL รวมถึง nonce หากคุณต้องการเปลี่ยนเส้นทางไปยัง 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
echo wp_loginout ('/ redirect / url / go / here') ทำงานได้ดี ..
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 ที่เป็นอันตรายโหลดลงในเบราว์เซอร์สามารถทำการเปลี่ยนเส้นทางไปยังหน้าเข้าสู่ระบบ แต่สิ่งที่ต้องทำก็คือออกจากระบบของผู้ใช้ รหัสที่เป็นอันตรายอย่างแท้จริงอาจพยายามที่จะแทนที่ URL ก่อนที่จะถูกต้อง nonce ผู้ใช้สามารถนำทางไปยังไซต์อื่นซึ่งมีลิงก์ไปยังหน้าล็อกเอาต์ของไซต์ปัจจุบัน - สมมติว่าไซต์อื่นทราบว่าผู้ใช้มีความสัมพันธ์ ไม่มีผลอื่นใดนอกจากการล็อกเอาต์ผู้ใช้ ฉันไม่เคยเห็นสิ่งนี้ ดังนั้นเพื่อตอบคำถามของคุณฉันไม่คิดว่าจะมีความหมายด้านความปลอดภัยสำหรับการลบการตรวจสอบ
TonyG

ผิดพลาดเปลี่ยนเส้นทางมากเกินไป ...
โซโลมอน 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();

ลิงค์อ้างอิง


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.