我正在用Ruby on Rails后端和ReactJS前端构建一个web应用程序。我正在使用Algolia instantsearch.js搜索页面,我想使用用户密钥来创建一个密钥,当页面加载和删除访问该密钥时,用户注销。我还想让它们在2小时后过期。
所有这些都很好,但是有时在instantsearch客户端尝试连接之前,新创建的用户密钥无法访问索引(很奇怪,对吧?),导致初始"搜索"失败,Algolia的服务器返回一个无效的密钥错误,并且结果部分为空白。不过,在之后的栏中立即键入搜索,键就会被接受。
我已经决定,当返回一个无效的键错误时,我希望客户端暂停一会儿,然后再试一次。如果失败,我希望向用户显示一条错误消息。这也是为了解决令牌过期的问题,而用户仍在使用它-消息可以直接要求用户刷新页面,避免混乱的突然无响应的应用程序。
有没有办法用即时搜索做到这一点?在标准的Algolia搜索中,您可以添加回调或像这样指定:
index.search({
filters: 'smartphone AND retina' // smartphone AND retina
}, function searchDone(err, content) {
if (err) {
console.error(err);
return;
}
console.log(content);
});
但是,由于instantsearch应该"只是工作",所以我似乎无法控制搜索功能。
SearchResults应该显示结果,它可以很好地从成功的搜索中获得点击,但据我所知,它们不存储响应代码。不过,如果我错了,那就太棒了。
这被建议用于获得类似回调的行为,但这些解决方案适用于render
方法,我认为如果整个客户端从一开始就出错,则不会发生这种情况。
当您在Algolia中使用add_user_key
时,在密钥的创建和传播之间有一个小延迟,因此对您的用户来说是一个问题。在已加载的集群上,这可能需要几秒钟。
检查API密钥是否准备好使用的一种方法是轮询get_user_key_acl
,直到它返回200 HTTP代码。
我们通常推荐使用secured_api_keys
。
Algolia的安全API密钥使用具有参数组合的实际API密钥。它们提供了与实际API密钥相同的限制功能(具有相同的安全性),但可以与尽可能多的帐户一起使用,动态更改而不必为所有客户重新生成所有API密钥,最终立即可用。