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