Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/476.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript REST请求弹性搜索缺少身份验证令牌_Javascript_<img Src="//i.stack.imgur.com/RUiNP.png" Height="16" Width="18" Alt="" Class="sponsor Tag Img">elasticsearch - Fatal编程技术网 elasticsearch,Javascript,elasticsearch" /> elasticsearch,Javascript,elasticsearch" />

Javascript REST请求弹性搜索缺少身份验证令牌

Javascript REST请求弹性搜索缺少身份验证令牌,javascript,elasticsearch,Javascript,elasticsearch,这是我第一次在这里发帖:我正在用AngularJS为前端创建一个网站,用NodeJS为后端创建一个网站。这个网站应该给我关于弹性搜索集群的信息,从Elasticsearch索引中获取一些信息。我曾尝试使用Elasticsearch Javascript API来完成我的请求,但没有成功 我正在使用ElasticSearch5.4 以下是请求的一个示例: var client = new elasticsearch.Client ({ host: 'https://noev02pe.fr

这是我第一次在这里发帖:我正在用AngularJS为前端创建一个网站,用NodeJS为后端创建一个网站。这个网站应该给我关于弹性搜索集群的信息,从
Elasticsearch
索引中获取一些信息。我曾尝试使用
Elasticsearch Javascript API
来完成我的请求,但没有成功

我正在使用
ElasticSearch
5.4

以下是请求的一个示例:

var client = new elasticsearch.Client ({

    host: 'https://noev02pe.fr:9200',
    auth: 'user:password',
    log: 'trace',
    headers: {
      'Authorization': 'Basic user:password',
     }
});

export function connect() {
  client.search({
    index: 'metric-prod*',
    q: 'kafka'
  }
, function (error, response) {
    console.log(response);
  });
}
控制台上的响应为:

{ error:
    { root_cause: [ [Object] ],
      type: 'security_exception',
      reason: 'missing authentication token for REST request [/metric-
      prod*/_search?q=kafka]',
      header: { 'WWW-Authenticate': 'Basic realm="security" charset="UTF-8"' 
    } },
  status: 401 }
我还尝试过做经典的post请求:

   export function createUser(request,response,next){
      var username = request.params.username;
      var userData = querystring.stringify(request.body);
      console.log(userData);
      var options ={
       hostname: 'noev02vr.fr',
       port: 9200,
        rejectUnauthorized: false,
        path: "_xpack/security/user/"+username,
    method:'POST',
    headers: {
      'Authorization': 'Basic ' + prodPass,
      'Content-Type': 'application/json',
      'Content-Length': userData.length
    }
  };



 var post_req=http.request(options, function(res){
            console.log('post user reussi');
            res.on('data', function(data){

             response.writeHead(res.statusCode);
             response.write(data);
             console.log(res.statusCode);
           });

         });

          post_req.write(userData);
          post_req.end();

       }
我得到一个500的错误

基本身份验证

const { Client } = require('@elastic/elasticsearch')
const client = new Client({
  node: 'https://localhost:9200', //Replace with your URL.
  auth: { 
    username: 'elastic',
    password: '*****' //Replace with your password
  }
})
否则,您可以在节点URL中提供凭据

如果您已启用ssl,则这是配置

const { Client } = require('@elastic/elasticsearch')
const client = new Client({
  node: 'https://localhost:9200',
  auth: {
    username: 'elastic',
    password: '*****'
  },
  ssl: {
    ca: fs.readFileSync('./cacert.pem'),
    rejectUnauthorized: false
  }
})
您可以通过此链接获取用户名和密码

基本身份验证

const { Client } = require('@elastic/elasticsearch')
const client = new Client({
  node: 'https://localhost:9200', //Replace with your URL.
  auth: { 
    username: 'elastic',
    password: '*****' //Replace with your password
  }
})
否则,您可以在节点URL中提供凭据

如果您已启用ssl,则这是配置

const { Client } = require('@elastic/elasticsearch')
const client = new Client({
  node: 'https://localhost:9200',
  auth: {
    username: 'elastic',
    password: '*****'
  },
  ssl: {
    ca: fs.readFileSync('./cacert.pem'),
    rejectUnauthorized: false
  }
})
您可以通过此链接获取用户名和密码


胡乱猜测:在发送授权标头时,您是否忘记对用户名和密码进行base64编码?另外,官方文档使用不同的机制来配置用户/通行证,以便自动进行base64编码。谢谢你花时间回答我!我尝试了两者,但是在Javascript API中,您不需要编码,您可以直接使用user:password。这是为了你需要编码的经典http请求,这是我的变量prodPass:密码编码在base64中这一个有任何更新吗?胡乱猜测:你在发送授权头时忘记了base64编码用户名和密码吗?另外,官方文档使用不同的机制来配置用户/通行证,以便自动进行base64编码。谢谢你花时间回答我!我尝试了两者,但是在Javascript API中,您不需要编码,您可以直接使用user:password。您需要对经典的http请求进行编码,这是我的变量prodPass:base64中编码的密码。是否有更新?