Как установить заголовки в почтовом запросе? - Angular - PullRequest
0 голосов
/ 01 марта 2020

В настоящее время я внедряю аутентификацию JWT - я реализовал ее в соответствии с этим руководством: https://medium.com/dev-bits/a-guide-for-adding-jwt-token-based-authentication-to-your-single-page-nodejs-applications-c403f7cf04f4. И хотя мой код работает, я не могу понять, как отправить запрос на публикацию с моего angular фронта с паролем и именем пользователя. Учебник использует эту команду для запуска в терминале для входа в систему:

curl --header "Content-Type: application/json" \
  --request POST \
  --data '{"password":"password", "username":"admin"}' \
  http://localhost:8000/login

Как я могу преобразовать эту команду в пост-запрос в форме:

http.post('URL', <data>)

, чтобы я мог сделать запрос из внешнего интерфейса?

Когда внутренний запрос обрабатывается после отправки запроса на вход в систему, это вызывает метод login класса HandlerGenerator, который вы можете найти здесь:

const express = require('express');
const bodyParser = require('body-parser');
let jwt = require('jsonwebtoken');
let config = require('./config');
let middleware = require('./middleware');

class HandlerGenerator {


  login (req, res) {
    let username = req.body.username;
    let password = req.body.password;

    // For the given username fetch user from DB
    let mockedUsername = 'admin';
    let mockedPassword = 'password';

    if (username && password) {
      if (username === mockedUsername && password === mockedPassword) {
        let token = jwt.sign({username: username},
          config.secret,
          { expiresIn: '24h' // expires in 24 hours
          }
        );
        // return the JWT token for the future API calls
        res.json({
          success: true,
          message: 'Authentication successful!',
          token: token
        });
      } else {
        res.send(403).json({
          success: false,
          message: 'Incorrect username or password'
        });
      }
    } else {
      res.send(400).json({
        success: false,
        message: 'Authentication failed! Please check the request'
      });
    }
  }

  index (req, res) {
    res.json({
      success: true,
      message: 'Index page'
    });
  }


}

// Starting point of the server
function main () {
  let app = express(); // Export app for other routes to use
  let handlers = new HandlerGenerator();
  const port = process.env.PORT || 3000;

  ////////////////////////////////////////////////////////////////////////////////////
  app.use(bodyParser.urlencoded({ // Middleware
    extended: true
  }));

  app.use(bodyParser.json());

  // catch 404 and forward to error handler
  app.use(function(req, res, next) {
    let err = new Error('Not Found');
    err.status = 404;
    next(err);
  });

  ////////////////////////////////////////////////////////////////////////////////////
  // Routes & Handlers
  app.get('/', middleware.checkToken, handlers.index);

  ////////////////////////////////////////////////////////////////////////////////////
  app.post('/login', handlers.login);

  ////////////////////////////////////////////////////////////////////////////////////
  app.listen(port, () => console.log(`Server is listening on port: ${port}`));

  module.exports = app;
}

main();

В случае, если сделан запрос с токеном вместо информации для входа в систему, для проверки токена используется промежуточное программное обеспечение:

let jwt = require('jsonwebtoken');
const config = require('./config.js');

let checkToken = (req, res, next) => {
  let token = req.headers['x-access-token'] || req.headers['authorization']; // Express headers are auto converted to lowercase

  if (token) {
    if (token.startsWith('Bearer ')) {
      // Remove Bearer from string
      token = token.slice(7, token.length);
    }

    jwt.verify(token, config.secret, (err, decoded) => {
      if (err) {
        return res.json({
          success: false,
          message: 'Token is not valid'
        });
      } else {
        req.decoded = decoded;
        next();
      }
    });
  } else {
    return res.json({
      success: false,
      message: 'Auth token is not supplied'
    });
  }
};

module.exports = {
  checkToken: checkToken
};

Если вы могли бы рассказать мне, как преобразовать команду, используемую для входа через Терминал в правильный почтовый запрос, который может быть использован у меня, это было бы очень полезно ... Большое спасибо за вашу помощь!

С уважением, Сэм

1 Ответ

0 голосов
/ 01 марта 2020

это должно быть что-то вроде

http.post(
  'http://localhost:8000/login', 
  { password: 'password', username: 'admin' },
  { headers:  new HttpHeaders({ 'Content-Type':  'application/json' }) }
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...