Ruby On Rails:ElasticSearch 身份验证(Tire 和 ElasticSearch-rails)

Sso*_*esS 4 ruby-on-rails elasticsearch tire ruby-on-rails-4

我在 Heroku 上部署了 Ruby On Rails 应用程序,我使用 ElasticSearch 插件,我的弹性搜索集群工作正常,但最近 ElasticSearch 插件要求所有集群强制执行身份验证,以保护托管集群内部的数据,现在,对于我们尝试提出的每个请求,我们都会收到以下异常:

Tire::Search::SearchRequestFailed (401 : {"error":{"root_cause":[{"type":"security_exception","reason":"action [indices:data/read/search] requires authentication","header":{"WWW-Authenticate":"Basic realm=\"shield\" charset=\"UTF-8\""}}],"type":"security_exception","reason":"action [indices:data/read/search] requires authentication","header":{"WWW-Authenticate":"Basic realm=\"shield\" charset=\"UTF-8\""}},"status":401}):
Run Code Online (Sandbox Code Playgroud)

我们从Elasticsearch 附带的Shield插件配置了一些用户,但是我不确定如何从我的 ruby​​ On Rails 应用程序输入此身份验证,我使用 Tire 在我的 Ruby On Rails 应用程序中集成弹性搜索,但我找不到我可以输入这些信息来验证我的应用程序并解决此问题吗?

我们想知道如何使用这两个 gem 进行身份验证: ElasticSearch-railsTire

vza*_*llo 6

我建议使用elasticsearch-rails而不是tire(已废弃)。

使用elasticsearch-rails:

宝石文件

gem 'elasticsearch'
gem 'elasticsearch-model'
gem 'elasticsearch-rails'
Run Code Online (Sandbox Code Playgroud)

模型是否可搜索

特征提取模式(可搜索关注点)应用于您的模型。

配置您的弹性搜索客户端

对于初始化程序(config/initializers/elastic_search_client.rb或其他)中的所有模型,使用通用 URL 格式进行身份验证

Elasticsearch::Client.new url: 'https://username:password@api.server.org:4430/search'

或使用哈希进行身份验证

Elasticsearch::Client.new hosts: [
  { host: 'my-protected-host',
    port: '443',
    user: 'USERNAME',
    password: 'PASSWORD',
    scheme: 'https'
  } ]
Run Code Online (Sandbox Code Playgroud)

查看高级客户端选项以获取更多信息。

注意:我没有亲自测试它,这是理论,可能缺少某些内容,请检查elasticsearch-rails 文档

我希望这有帮助。