Comment rediriger l'utilisateur vers l'url après la confirmation du mot de passe?


Climat

L'idée:

J'ai une route protégée "/ me" et à CHAQUE FOIS l'utilisateur essaie de s'y rendre, il doit entrer son mot de passe (même si l'utilisateur est déjà connecté). Si le mot de passe est correct, l'utilisateur accède à la route "/ me".


Le problème:

J'utilise express. Il existe un middleware appelé "confirm-transaction" sur la route "/ me". Et lorsque l'utilisateur accède à la route "/ me", ce middleware redirige l'utilisateur vers "/ confirm-transaction? Redirect = / me" et l'utilisateur peut voir un champ dans lequel il doit entrer son mot de passe.

Et en ce moment je ne sais pas quoi faire, car si le mot de passe est correct, j'essaye de rediriger l'utilisateur vers la route "/ me" (j'obtiens cette route depuis le paramètre "? Redirect = / me"), mais le middleware redirige à nouveau lui à "/ confirm-transaction? redirect = / me". Et l'utilisateur ne peut jamais accéder à la route "/ me".


La question est:

Comment puis-je résoudre cette situation? Je sais que je devrais utiliser "next ()" si le mot de passe est correct, mais je ne peux pas le faire car le middleware effectue une redirection et je n'ai plus de "next ()"


Voici un code:

const express = require('express');
const server = express();

const requestAuthorization = (req, res, next) => {
  res.redirect(301, `/confirm-transaction?redirect=${req.originalUrl}`);
};

server.get('/me', requestAuthorization, (req, res) => {
  res.status(200).send("this is /me route");
});

server.get('/confirm-transaction', (req, res) => {
  res.status(200).sendFile("password.html");
  // there is a form with field and button with POST method to '/confirm-transaction'
});

server.post('/confirm-transaction', (req, res) => {
  if (req.query.password === 'testpassword') { // it is a fake password (for testing)
     res.redirect(301, req.query.redirect);
  }
  res.redirect(301, `/confirm-transaction?redirect=${req.query.redirect}`);
});

Nikko Khresna

/meredirige aveuglément vers /confirm-transactionn'importe quoi.

Ce que vous pouvez faire est de:
1. envoyer à l'utilisateur un jeton (ou une sorte) après une autorisation réussie. Le client le stocke puis la demande suivante devrait avoir ce jeton dans l'en-tête.
2. requestAuthorization()Vérifiez à l' intérieur si l'en-tête de la demande a un jeton valide. Si c'est le cas, ne redirigez pas, sinon, redirigez.

Remarque: dans votre cas, vous devrez peut-être rediriger avec un jeton dans l'en-tête.
Remarque: vous devez stocker le jeton quelque part qui a accès pour correspondre au jeton avec l'utilisateur.

Articles connexes