簡體   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