繁体   English   中英

如何在发布请求中设置标题? - 角

[英]How to set headers in post request? - Angular

我目前正在实施 JWT 身份验证 - 我根据本教程实施了它: https : //medium.com/dev-bits/a-guide-for-adding-jwt-token-based-authentication-to-your-single-page -nodejs-applications-c403f7cf04f4 虽然我的代码有效,但我不知道如何使用密码和用户名从我的 angular 前端发送 post 请求。 本教程使用此命令在终端运行登录:

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

我怎样才能将此命令转换为以下形式的发布请求:

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

以便我可以从前端提出请求?

当后端处理登录的 post 请求时,这将调用 HandlerGenerator 类的 login 方法,您可以在此处找到该方法:

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
};

如果您能告诉我如何将用于通过终端登录的命令转换为正确的 post 请求,可以在我的前面使用,那将非常有帮助...非常感谢您的帮助!

最好的问候,山姆

它应该是这样的

http.post(
  'http://localhost:8000/login', 
  { password: 'password', username: 'admin' },
  { headers:  new HttpHeaders({ 'Content-Type':  'application/json' }) }
);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM