是否存在无效令牌错误的Algolia instantsearch回调?

时间:2016-10-17 23:14:51

标签: ruby-on-rails error-handling algolia

我正在构建一个带有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方法,如果整个客户端从一开始就出错,我认为不会发生这种情况。

1 个答案:

答案 0 :(得分:6)

在Algolia中使用add_user_key时,密钥的创建与其传播之间会有一点延迟,因此对您的用户来说就是问题。在加载的群集上,这可能需要几秒钟。

检查API密钥是否可以使用的方法是轮询get_user_key_acl,直到它返回200 HTTP代码。

我们通常建议使用secured_api_keys Algolia的安全API密钥使用具有参数组合的实际API密钥。 它们提供与实际API密钥相同的限制功能(具有相同的安全性),但可以根据需要与多个帐户一起使用,动态更改,无需为所有客户重新生成所有API密钥,最终可立即使用。< / p>