验证是否使用了正确的随机数和时间限制。

原型

wp_verify_nonce( string $nonce, string|int $action = -1 )

描述

用户有一定的时间来使用令牌,因此,由于UID和$ action保持不变,因此自变量就是时间。

参数

$nonce (string) (Required) 在表单中用于验证的Nonce

$action (string|int) (Optional) 应该为正在发生的事情提供上下文,并在创建现时时保持相同。

返回值

(false|int)  如果nonce无效,则为false;如果nonce有效并且在0-12小时之前生成,则为1;如果nonce有效并且在12-24小时之前生成,则为2。

源文件

路径:wp-includes/pluggable.php

<?php
...
function wp_verify_nonce( $nonce, $action = -1 ) {
	$nonce = (string) $nonce;
	$user = wp_get_current_user();
	$uid = (int) $user->ID;
	if ( ! $uid ) {
		/**
		 * Filters whether the user who generated the nonce is logged out.
		 *
		 * @since 3.5.0
		 *
		 * @param int    $uid    ID of the nonce-owning user.
		 * @param string $action The nonce action.
		 */
		$uid = apply_filters( 'nonce_user_logged_out', $uid, $action );
	}
	if ( empty( $nonce ) ) {
		return false;
	}
	$token = wp_get_session_token();
	$i = wp_nonce_tick();
	// Nonce generated 0-12 hours ago
	$expected = substr( wp_hash( $i . '|' . $action . '|' . $uid . '|' . $token, 'nonce'), -12, 10 );
	if ( hash_equals( $expected, $nonce ) ) {
		return 1;
	}
	// Nonce generated 12-24 hours ago
	$expected = substr( wp_hash( ( $i - 1 ) . '|' . $action . '|' . $uid . '|' . $token, 'nonce' ), -12, 10 );
	if ( hash_equals( $expected, $nonce ) ) {
		return 2;
	}
	/**
	 * Fires when nonce verification fails.
	 *
	 * @since 4.4.0
	 *
	 * @param string     $nonce  The invalid nonce.
	 * @param string|int $action The nonce action.
	 * @param WP_User    $user   The current user object.
	 * @param string     $token  The user's session token.
	 */
	do_action( 'wp_verify_nonce_failed', $nonce, $action, $user, $token );
	// Invalid nonce
	return false;
}
...
?>

其他

英文文档:https://developer.wordpress.org/reference/functions/wp_verify_nonce/