WP REST API:检查用户是否已登录

时间:2017-08-24 作者:Daniele Squalo

其想法是在一个主题中显示或隐藏站点的某些部分,该主题使用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\')
));
Thenonce 参数起作用,我可以通过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;
                }
            }
        });

1 个回复
最合适的回答,由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\'];
}

结束