javascript - Node API'de GET isteğinden JWT token nasıl çözülür


Yetkilendirme için istekler arasında JWT tokenları gönderiyorum, ancak her seferinde tokenı çözmeyi başaramıyorum gibi görünüyor. Bir yöntemle çalışıyor ama diğeriyle çalışmıyor. İlk kod parçası sunucu tarafında 'çözülmüş' bir token sonucu veriyor, ancak ikinci kod parçası vermiyor.

public async getAllUsers(req: Request, res: Response) {
    try {
      const payload = req["decoded"]; // gives the token decoded
      if (payload) {
        let users: ILoginResult = await UserData.getAllUsers(payload);
        res.status(users.status).send(users.result);
      }
    } catch (e) {
      res.status(500).send({ error: e.toString() });
    }
  }
  public async getAccountDetails(req: Request, res: Response) {
    try {
      const user = req["decoded"]; // always undefined
      let details: IDetails = await AccountData.getAccountDetails(name);
      res.status(200).send(details);
    } catch (e) {
      let err = e.toString();
      res.status(500).send({ error: err });
    }
  }

Postmandan gelen istekler, giriş sırasında sağlanan ve uygulamanın diğer bölümlerinde kullanılan bir bearer token içerir. Neden birinde çalışıp diğerinde çalışmadığını bilmiyorum. Burada neler olup bittiğini daha iyi açıklayabilecek veya ipuçları, tavsiyeler, öneriler sunabilecek birinin olmasını gerçekten takdir ederim.

düzenle - istek detaylarını ekleme

bir token ile http://localhost:5000/api/v1/account adresine get isteği: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyIjoiYWRtaW4iLCJpYXQiOjE1Nzc5OTUwMjUsImV4cCI6MTU3ODE2NzgyNSwiaXNzIjoiaHR0cDovL2xvY2FsaG9zdCJ9.--msLba1VPs4Nv_B9YL6fk2DFHkQCgiVvDJFPt_UnDk

Takip ettiğim bir öğretici sırasında decoded özelliği kullanıldı; bu özellik sunucu tarafında eklenmiş gibi görünüyordu ama kötü bir şekilde açıklanmıştı ve iyi bir alternatif/açıklama bulamadım. Ayrıca herhangi bir ara yazılımı olduğunu da sanmıyorum. Alternatif yöntemlere oldukça açığım.

Cevap #1

Yorumlardan gelen öneriler sayesinde burada kullanılan decoded özelliğini oluşturan rotadaki eksik bir parçayı bulabildim. Router'a middleware ekleyerek istek beklendiği gibi çalışıyor:

import express from "express";
import UserController from "../controllers/UserController";
import valid from "../utils/ValidateToken";

export default (router: express.Router) => {
  router
    .route("/users")
    .post(UserController.addUser)
    .get(valid.validateToken, UserController.getAllUsers);

  router.route("/login").post(UserController.loginUser);
  router.route("/account").get(valid.validateToken, UserController.getAccountDetails);
};

valid.validateToken eksikti, o da geçen JWT'den çözülmüş nesneyi üreten kısımdı. Hikayenin morali, her şeyi daima çift kontrol edin. Yorum yapan/yanıtlayan herkese teşekkürler!

İlgili makaleler