nonce – check_admin_referer failing with POST-form
Question
I’m using the following code to allow my customers to delete their account, if they like.
To prevent accedential direct opening the delete-link I’ve added a form.
But now the check_admin_referer
-check seems to fail.
Does someone have an idea to fix the code?
add_action( 'woocommerce_after_edit_account_form', 'woo_delete_account_button' );
function woo_delete_account_button() {
$delete_url = add_query_arg( 'wc-api', 'wc-delete-account', home_url( "https://wordpress.stackexchange.com/" ) );
$delete_url = wp_nonce_url( $delete_url, 'wc_delete_user' );
if ( ! current_user_can( 'manage_options' ) ) {
?>
<hr><h4 id="delete-account">Konto löschen</h4> Hier können Sie Ihr Konto unwiederbringlich löschen. Bitte beachten Sie folgende Hinweise:<br> <b>Gekaufte Downloads können nach der Konto-Löschung über die per E-Mail erhaltenen Links weiter heruntergeladen werden. Ein Zugriff auf Ihre Rechnungen, das Kundenportal, Ihren Bestell-Verlauf, Wunschliste, Rechnungsadresse und Konto-Daten ist nicht mehr möglich. Ferner ist die Verwaltung Ihrer Lizenz-Schlüssel nicht länger möglich, diese bleiben jedoch gültig.</b><br><br><form action="<?php echo $delete_url; ?>" onsubmit="return confirm('Sind Sie ganz sicher, dass Sie den Zugang zu allen genannten Funktionen sofort verliehren und Ihr Konto löschen möchten? Eine Wiederherstellung wird nicht möglich sein.')"><input type="submit" class="button" value="Konto unwiederruflich löschen" style="color:red;"></form>
<?php }
}
add_action( 'woocommerce_api_' . strtolower( 'wc-delete-account' ), 'woo_handle_account_delete' );
function woo_handle_account_delete() {
if ( ! current_user_can( 'manage_options' ) ) {
$security_check_result = check_admin_referer( 'wc_delete_user' );
if ( $security_check_result ) {
require('./wp-admin/includes/user.php');
wp_delete_user( get_current_user_id() );
wp_redirect( home_url() );
die();
}
}
}
Best regards,
Falk
0
9 months
2022-05-08T00:09:47-05:00
2022-05-08T00:09:47-05:00 0 Answers
0 views
0
Leave an answer