Неопределенный заголовок в Node js с использованием axios - PullRequest
0 голосов
/ 23 февраля 2020

Я пытаюсь передать токен в заголовке из CLI в Rest Api. Однако заголовок считается неопределенным на стороне сервера. Код файла CLI следующий:

import cli from 'cli-ux'
// just prompt for input
import {Command} from '@oclif/command'
import {createConnection} from "typeorm";
import {flags} from  '@oclif/command'
const bcrypt = require('bcrypt');
var fs=require('fs');
const https = require('https')
const axios=require('axios');
const client_cert = fs.readFileSync('ca-crt.pem')
axios.defaults.httpsAgent = new https.Agent({ca : client_cert, keepAlive: true})
export class AdminCommand extends Command {
  static flags = { 
    newuser: flags.string({dependsOn:['passw'],exclusive:['newdata','userstatus','moduser']}),
    moduser: flags.string({dependsOn:['passw'],exclusive:['newuser','newdata','userstatus']}),
    passw: flags.string({dependsOn:['email']}),
    email: flags.string({dependsOn:['quota']}),
    quota: flags.string(),
    userstatus: flags.string({exclusive:['newdata','newuser','moduser']}),
    newdata: flags.string({dependsOn:['source'],exclusive:['newdata','newuser','moduser']}),
    source: flags.string()
  }
  async run() {
    const {flags} = this.parse(AdminCommand); 
    var fs=require('fs');
    var jwt=require('jsonwebtoken');
    var token = fs.readFileSync('softeng19bAPI.token');
    axios.defaults.headers.common['X-OBSERVATORY-AUTH']="Bearer " + token;
    await cli.anykey();
    //create new user
    if (`${flags.newuser}` !== "undefined" && `${flags.passw}` !== "undefined" && `${flags.email}` !== "undefined" && `${flags.quota}` !== "undefined" ){
            let hash = bcrypt.hashSync(`${flags.passw}`,10);
            await axios.post('https://localhost:8765/energy/api/Admin/users?username=' +`${flags.newuser}` +'&passw=' + hash +'&email=' + `${flags.email}`  +'&quota=' + `${flags.quota}`);

    }

Я передаю токен в заголовке. Но когда я печатаю заголовок на стороне сервера, он не определен. Код на стороне сервера следующий:

module.exports = app => {
  const entry = require("../controlers/entry.controller.js");
  const sql = require("../models/db.js");
  const bcrypt = require('bcrypt');
  const isloggedin=require('../routes/isloggedin.js');
  var express=require('express');

  // Retrieve a single Entry with Id
  var fs=require('fs');
  var privateKey = fs.readFileSync('private.key');

 app.post("/energy/api/Admin/users",async function(req,res){
                const token =  req.headers['X-OBSERVATORY-AUTH'];
                console.log(token);
                var a = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890".split("");
                var b = [];  
                for (var i=0; i<12; i++) {
                        var j = (Math.random() * (a.length-1)).toFixed(0);
                        b[i] = a[j];
                }
                var rest=b.join("");
                var count=0;
                const resul = [rest[0]];
                for(let x=1; x<rest.length; x++){
                        count=count+1;
                        if(count==4)
                        {
                            resul.push('-', rest[x]);
                            count=0;
                        }
                        else
                            {
                              resul.push(rest[x]);
                            }
                    }
                const apik=resul.join('');
                //console.log(apikey);
                //insert into table
                //console.log(req.query.passw);
                //console.log(hash);
                if (req.query.username !== "undefined" && req.query.email !== "undefined" && req.query.quota !== "undefined"){ 
                    sql.query(`INSERT INTO users VALUES (?,?,?,?,?,?)`,[req.query.username,req.query.passw,req.query.email,req.query.quota,apik,'user'],(err,res2) => {
                                if (err) {
                                  console.log("error: ", err);
                                  result(err, null);
                                  return;
                                }
                });

                }
                res.send("Succesful "+apik);
  }); 

Почему он проходит как неопределенный? Когда я печатаю его в CLI, токен не пуст. Я пишу в node js, express js

1 Ответ

0 голосов
/ 23 февраля 2020

Вместо передачи носителя в заголовке ax ios вот так

axios.defaults.headers.common['X-OBSERVATORY-AUTH']="Bearer " + token;

Попробуйте выложить вот так

   await axios.post('https://localhost:8765/energy/api/Admin/users?username=' +`${flags.newuser}` +'&passw=' + hash +'&email=' + `${flags.email}`  +'&quota=' + `${flags.quota}`, {}, {
        headers: {"Authorization": `Bearer ` + token}})

И со стороны сервера получить токен из запроса на проверку

 const token = req.headers.authorization.split(" ")[1];
...