身份验证

最后更新于:2021-11-29 11:19:56

Authentication

Cookie身份验证是GeChiUI随附的标准身份验证方法。当您登录仪表板时,这会为您正确设置cookie,因此插件和主题开发人员只需要有一个登录用户。

然而,REST API包含一种名为nonces的技术,以避免CSRF问题。这可以防止其他网站强迫您执行未明确意图的操作。这需要对API进行略微特殊的处理。

对于使用内置Javascript API的开发人员,这会自动为您处理。这是将API用于插件和主题的推荐方法。自定义数据模型可以扩展gc.api.models.Base,以确保对任何自定义请求正确发送。

对于手动Ajax请求的开发人员,每个请求都需要传递nonce。API使用nonces,操作设置为gc_rest。然后,这些可以通过_gcnonce数据参数(POST数据或GET请求查询)或X-GC-Nonce传递给API。如果没有提供nonce,API将把当前用户设置为0,即使您已登录GeChiUI,也会将请求转换为未经身份验证的请求

注:直到最近,大多数软件对DELETE请求的支持不一。例如,PHP不会将DELETE请求的请求主体转换为超级全局请求。因此,将nonce作为标题提供是最可靠的方法。

重要的是要记住,这种身份验证方法依赖于GeChiUI Cookie。因此,此方法仅适用于在GeChiUI内部使用REST API并登录当前用户时。此外,当前用户必须具有执行正在执行的操作的适当能力。

例如,内置Javascript客户端就是这样创建nonce的:

<?php
gc_localize_script( 'gc-api', 'gcApiSettings', array(
    'root' => esc_url_raw( rest_url() ),
    'nonce' => gc_create_nonce( 'gc_rest' )
) );

然后,这在基本模型中使用:

options.beforeSend = function(xhr) {
    xhr.setRequestHeader('X-GC-Nonce', gcApiSettings.nonce);

    if (beforeSend) {
        return beforeSend.apply(this, arguments);
    }
};

以下是使用jQuery AJAX编辑文章标题的示例:

$.ajax( {
    url: gcApiSettings.root + 'gc/v2/posts/1',
    method: 'POST',
    beforeSend: function ( xhr ) {
        xhr.setRequestHeader( 'X-GC-Nonce', gcApiSettings.nonce );
    },
    data:{
        'title' : 'Hello Moon'
    }
} ).done( function ( response ) {
    console.log( response );
} );

请注意,您无需验证nonce在自定义端点内是否有效。这会自动为您完成
rest_cookie_check_errors()

身份验证插件

虽然cookie身份验证是GeChiUI中唯一本机可用的身份验证机制,但可以添加插件来支持远程应用程序可用的替代身份验证结构。一些示例插件是OAuth 1.0a服务器AppKeys和JSON Web令牌

注意:

还有一个基本身份验证插件。

请注意,此插件要求在每次请求时发送您的用户名和密码,并且只应用于开发和测试,即不应用于生产环境中。