身份验证
最后更新于:2021-11-29 11:19:56
Authentication
Cookie身份验证
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令牌。
注意:
还有一个基本身份验证插件。
请注意,此插件要求在每次请求时发送您的用户名和密码,并且只应用于开发和测试,即不应用于生产环境中。