我正在使用Apple的新CloudKit JS参考和示例代码来构建一个简单的CRUD应用程序。但是,在我甚至无法使用CRUD之前,我就被Apple身份验证所阻止。
index.html
<html>
<body>
<div id="apple-sign-in-button">Sign in
<span id="username"></span>
</div>
<script>
/*
* Initialize the global objects we will need.
*/
if(typeof CKCatalog === 'undefined') {
CKCatalog = {};
}
if(typeof CKCatalog.tabs === 'undefined') {
CKCatalog.tabs = {
'readme': [{}],
'not-found': [{}]
};
}
</script>
<script src="js/init.js"></script>
<script src="js/cloudkit-code-samples/authentication.js"></script>
<script>
window.addEventListener('cloudkitloaded',CKCatalog.init);
</script>
<script async src="https://cdn.apple-cloudkit.com/ck/1/cloudkit.js"> </script>
</body>
包括div id =“ apple-sign-in-button”和span id =“ username”摆脱了所有错误,除了:
加载资源失败:服务器响应状态为421(错误请求)。
通常在其他任何地方提及此错误都将其与SMTP或FTP绑定在一起。知道发生了什么吗?
CloudKit.js库是CloudKit Web服务的包装,其文档指出,在调用要求身份验证的请求但未登录用户时,会发生HTTP 421。
这是预期的,因为您的应用可能需要确定用户是否已登录,如果没有,则显示相应的“登录”按钮。该CloudKit目录例子对验证部分展示了如何可以通过调用此设置container.setUpAuth()
,这将检查用户时,如果检测没有呈现登录按钮。您的init.js代码中可能会发生这种情况,但是我不确定自己是否知道。
我看到您apple-sign-in-button
的页面上有div。如果要调用该setUpAuth
方法,则应该在其中看到“登录”按钮。
用户单击该按钮并登录后,您可以重新发出原始请求,该请求收到421并应获得有效的200。
不要忘记,如果要保留用户的CloudKit会话,可以auth: { persist: true }
在初始化Container时使用(有关更多信息,请参见CloudKit.js文档)。
您还需要确保已在CloudKit仪表板中为容器创建了API令牌。这是初始化容器时使用的令牌。在CloudKit JS和Web服务上查看WWDC 2015视频,以观看此演示。
希望对您有所帮助!
更新:
在测试Web应用程序时,请确保已配置API令牌(使用CloudKit仪表板)以允许您正在测试的域(例如localhost)。这最初是Sam的问题,但是localhost现在是开发环境中API令牌的受支持域。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句