WordPress函数:wp_signon 登录 WordPress 站点

江河/ 2023年07月11日/ WordPress/ 浏览 678

函数原型:


wp_signon( array $credentials = array(), string|bool $secure_cookie = '' ): WP_User|WP_Error


登录 WordPress 系统,并支持【记住我】的功能。


凭据是一个具有“user_login”、“user_password”和“记住”索引的数组。如果没有提供凭据,则将假定并使用登录表单(如果设置了)。


各种身份验证cookie将由该功能设置,并将根据“记住”凭据是否设置为true设置更长的时间。


注意:wp_signon()不处理设置当前用户。这意味着,如果在“init”钩子启动之前调用该函数,则is_user_loged_in()的计算结果将为false,直到该点为止。如果is_user_loged_in()需要与wp_signon()结合使用,则应显式调用wp_set_current_user()。


参数说明:


$credentials


- user_login 账户


- user_password 用户密码


- remember 记住我。


$secure_cookie 是否使用安全cookie。


如果不提供$credentials,wp_signon将使用$_POST变量(关键字为“log”、“pwd”和“rememberme”)。


此函数将页眉发送到页面。必须先运行它,然后才能返回任何内容。


此函数用于设置身份验证cookie。如果未发送,用户将不会登录。


函数源码:


function wp_signon( $credentials = array(), $secure_cookie = '' ) {
	if ( empty( $credentials ) ) {
		$credentials = array(
			'user_login'    => '',
			'user_password' => '',
			'remember'      => false,
		);

		if ( ! empty( $_POST['log'] ) ) {
			$credentials['user_login'] = wp_unslash( $_POST['log'] );
		}
		if ( ! empty( $_POST['pwd'] ) ) {
			$credentials['user_password'] = $_POST['pwd'];
		}
		if ( ! empty( $_POST['rememberme'] ) ) {
			$credentials['remember'] = $_POST['rememberme'];
		}
	}

	if ( ! empty( $credentials['remember'] ) ) {
		$credentials['remember'] = true;
	} else {
		$credentials['remember'] = false;
	}

	do_action_ref_array( 'wp_authenticate', array( &$credentials['user_login'], &$credentials['user_password'] ) );

	if ( '' === $secure_cookie ) {
		$secure_cookie = is_ssl();
	}

	$secure_cookie = apply_filters( 'secure_signon_cookie', $secure_cookie, $credentials );

	global $auth_secure_cookie; // XXX ugly hack to pass this to wp_authenticate_cookie().
	$auth_secure_cookie = $secure_cookie;

	add_filter( 'authenticate', 'wp_authenticate_cookie', 30, 3 );

	$user = wp_authenticate( $credentials['user_login'], $credentials['user_password'] );

	if ( is_wp_error( $user ) ) {
		return $user;
	}

	wp_set_auth_cookie( $user->ID, $credentials['remember'], $secure_cookie );

	do_action( 'wp_login', $user->user_login, $user );
	return $user;
}


包含钩子:


apply_filters( 'secure_signon_cookie', bool $secure_cookie, array $credentials )

do_action_ref_array( 'wp_authenticate', string $user_login, string $user_password )

do_action( 'wp_login', string $user_login, WP_User $user )


使用举例:


/**
 * Perform automatic login.
 */
function wpdocs_custom_login() {
	$creds = array(
		'user_login'    => 'example',
		'user_password' => 'plaintextpw',
		'remember'      => true
	);

	$user = wp_signon( $creds, false );

	if ( is_wp_error( $user ) ) {
		echo $user->get_error_message();
	}
}

// Run before the headers and cookies are sent.
add_action( 'after_setup_theme', 'wpdocs_custom_login' );


发表评论

暂无评论,抢个沙发...

客服 工单