如何使用基于 cookie 的身份验证从 REST API 获取用户
How to get user from REST API using cookie-based auth
快速上下文:我正在为我们的 WIP 无外设 WordPress 网站的一些自定义 restful 端点评估可能的身份验证解决方案。
我想要实现的 是使用基于 cookie 的身份验证在我的自定义端点中使 is_user_logged_in
return 为真。
这是我当前的设置,这是我尝试过的设置。
我在functions.php
中有以下内容
// create an endpoint for getting a nonce
function get_nonce() {
return new WP_REST_Response(array('nonce' => wp_create_nonce( 'wp_rest' )));
}
add_action( 'rest_api_init', function () {
register_rest_route('my-site', 'nonce', array(
'methods' => 'GET',
'callback' => __NAMESPACE__ . '\get_nonce'
));
} );
function get_orders() {
if ( !is_user_logged_in() ) {
return new WP_Error( 'not_authorized', 'You are not logged in', array('status' => 401) );
}
$orders = // ...
return new WP_REST_Response($orders);
}
add_action( 'rest_api_init', function () {
register_rest_route( 'my-site', 'orders', array(
'methods' => 'GET',
'callback' => __NAMESPACE__ . '\get_orders',
));
} );
总而言之,这创建了两个端点:
/wp-json/my-site/nonce
生成随机数
/wp-json/my-site/orders
提取一些用户数据
我做的是:
- 调用
GET /wp-json/my-site/nonce
获取nonce
- 致电
GET /wp-json/my-site/orders?_wpnonce=thepreviousnonce
我得到的是这个错误:
{
"code": "rest_cookie_invalid_nonce",
"message": "Cookie nonce is invalid",
"data": {
"status": 403
}
}
我只是使用浏览器和 URL 发出请求,并且我检查过每个请求中是否包含 cookie。
我错过了什么?为什么我收到 403?
您生成的随机数无效。在 rest 上下文中制作 nonce 是行不通的,因为那也需要一个 nonce! returns 是一个注销的用户随机数。如果您需要基于令牌的身份验证,我推荐 JWT
wp rest auth documentation
快速上下文:我正在为我们的 WIP 无外设 WordPress 网站的一些自定义 restful 端点评估可能的身份验证解决方案。
我想要实现的 是使用基于 cookie 的身份验证在我的自定义端点中使 is_user_logged_in
return 为真。
这是我当前的设置,这是我尝试过的设置。
我在functions.php
// create an endpoint for getting a nonce
function get_nonce() {
return new WP_REST_Response(array('nonce' => wp_create_nonce( 'wp_rest' )));
}
add_action( 'rest_api_init', function () {
register_rest_route('my-site', 'nonce', array(
'methods' => 'GET',
'callback' => __NAMESPACE__ . '\get_nonce'
));
} );
function get_orders() {
if ( !is_user_logged_in() ) {
return new WP_Error( 'not_authorized', 'You are not logged in', array('status' => 401) );
}
$orders = // ...
return new WP_REST_Response($orders);
}
add_action( 'rest_api_init', function () {
register_rest_route( 'my-site', 'orders', array(
'methods' => 'GET',
'callback' => __NAMESPACE__ . '\get_orders',
));
} );
总而言之,这创建了两个端点:
/wp-json/my-site/nonce
生成随机数/wp-json/my-site/orders
提取一些用户数据
我做的是:
- 调用
GET /wp-json/my-site/nonce
获取nonce - 致电
GET /wp-json/my-site/orders?_wpnonce=thepreviousnonce
我得到的是这个错误:
{
"code": "rest_cookie_invalid_nonce",
"message": "Cookie nonce is invalid",
"data": {
"status": 403
}
}
我只是使用浏览器和 URL 发出请求,并且我检查过每个请求中是否包含 cookie。
我错过了什么?为什么我收到 403?
您生成的随机数无效。在 rest 上下文中制作 nonce 是行不通的,因为那也需要一个 nonce! returns 是一个注销的用户随机数。如果您需要基于令牌的身份验证,我推荐 JWT wp rest auth documentation