其想法是在一个主题中显示或隐藏站点的某些部分,该主题使用AngularJS从REST API获取所有数据。
我认为这个检查对我有帮助(nonce作为标题传递,正如docs所建议的那样):
wp_localize_script(\'angularjs\', \'params\', array(
\'nonce\' => wp_create_nonce(\'wp_rest\'),
\'nonce_verify\' => wp_verify_nonce($_REQUEST[\'X-WP-Nonce\'], \'wp_rest\')
));
The
nonce 参数起作用,我可以通过AngularJS将其作为请求头传递,并成功记录。但是
nonce_verify 没有如预期的那样。
那么问题是:在使用cookie身份验证时,是否有方法检查用户是否登录?非常感谢。
编辑:我本地化了nonce的值,因为我需要在这段angularJS代码中获得它。这就是进行身份验证的地方:
$httpProvider.interceptors.push(function () {
return {
\'request\' : function (config) {
config.headers = config.headers || {};
config.headers[\'X-WP-Nonce\'] = params.nonce;
return config;
}
}
});
最合适的回答,由SO网友:Johansson 整理而成
您不应该将nonce传递给JavaScript来验证它,因为客户端脚本很容易操作。相反,您应该从前端内容中获取nonce,然后将其传递给服务器进行验证。
验证后,您应该决定通过服务器输出内容,而不是通过JavaScript文件。
类似这样:
if ( is_user_logged_in() ) {
if ( wp_verify_nonce($_REQUEST[\'X-WP-Nonce\'], \'wp_rest\') {
// Nonce is correct!
} else {
// Don\'t send the data, it\'s a trap!
}
}
另外,RESTAPI提供了自己的方法来获取传递的查询。因此,您可以在回调函数中这样获得它:
function foobar( \\WP_REST_Request $request ) {
$nonce = $request[\'X-WP-Nonce\'];
}