Как указать Express Route с любой строкой после / reset / - PullRequest
0 голосов
/ 01 июня 2018

Я создаю веб-приложение Node / Express.js и не хочу, чтобы какой-либо пользователь веб-приложения обращался к страницам, отличным от индекса, забыл пройти и выполнить сброс без входа в систему. Я использую этот маршрут сброса для сброса пароля.Поэтому я отправляю случайный токен после / reset / (например: ../reset/4c1ff3ada180bea9da6333fd9555dd100828d530).Я установил базовое промежуточное ПО для ограничения доступа к другим страницам без входа в систему.

Это мое промежуточное программное обеспечение.

'use strict';
var express = require('express');

module.exports = {
    isLoginCheck : function (request, response, next) {
      if(!request.session.user && request.path != '/index' && request.path != '/forgot-pass' && request.path != '/forgot' && request.path != '/reset/*'){
         response.redirect('/index');
      }else{
         next();
      }
   },
};

Но / reset / * не соответствует моемумаршруты, поэтому возвращает меня на страницу индекса.Мне нужно отправить токен после / reset /, чтобы я мог запросить базу данных для сброса пароля.

Так как я могу указать любую произвольную строку после / reset /?

Это мойроутер для /reset.

router.get('/reset/:token', indexController.pagesReset);

Ответы [ 3 ]

0 голосов
/ 01 июня 2018

Это регулярное выражение захватывает все после /reset/.

(?:\/reset\/)(.+)

var myString = "/reset/fhlkejg234hk";
var myRegexp = /(?:\/reset\/)(.+)/g;
var token = myRegexp.exec(myString)[1];
console.log(token);
0 голосов
/ 01 июня 2018

Для лучшего масштабирования попробуйте что-то вроде этого

'use strict';
const express = require('express');

let app = express();

app.use('/users/:user_id', function(req, res, next) {
    console.log(req.params.user_id);
    res.send(req.params.user_id);
});

app.use(["/index","/forgot"], function (req, res, next) {
    console.log("For index")
    res.send("For index/forgot")
});

app.use("/", function (req, res, next) {
    console.log("For all other links")
    res.send("For all other links")
});

app.listen("2010",()=>console.log("Server at 2010"));

Пожалуйста, обратитесь https://expressjs.com/en/guide/writing-middleware.html для создания промежуточного программного обеспечения в экспресс

0 голосов
/ 01 июня 2018

Проблема связана с вашим состоянием, путь (если вы используете /reset/egze5g не /reset/*, а /reset/egze5g.

. Вы можете заменить это условие регулярным выражением: request.path.match(/\/reset\/[\w]+/)

На всякий случай: вы можете очистить свой код, заменив свою ужасную строку, полную условий, просто на

if (!request.session.user && !['/index', '/forgot-pass', '/forgot'].includes(request.path) && !request.path.match(/\/reset\/[\w+]/)){

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...