Обработка перенаправления в ExpressJS, избегая цикла перенаправления - PullRequest
1 голос
/ 12 января 2012

Я впервые использую Экспресс 'app.all(). Когда пользователь регистрируется через внешнего провайдера oAuth, мне все равно нужно, чтобы он предоставил электронное письмо после возвращения на сайт. Я в основном устанавливаю их как неактивные в базе данных и проверяю на req.session.active.

То, что я делаю, это

app.all('*', function(req, res, next) {
    if(!req.session.active) {
        if(req.path == '/complete_signup') {
            next();
        } else {
            return res.redirect('/complete_signup');            
        }
    }
});

Но, похоже, это не работает. Как я могу правильно проверить, перенаправлен ли уже пользователь?

Если вы можете предложить метод, отличный от app.all(), он также будет работать.

РЕДАКТИРОВАТЬ:

На второй взгляд, это работает, но ни один из внешних ресурсов (таблиц стилей, javascripts и т. Д.), Похоже, не загружается, поскольку они не соответствуют req.path.

1 Ответ

1 голос
/ 30 января 2018

Вы можете использовать промежуточное программное обеспечение express-redirect-loop (которое использует сеансы, поскольку заголовок HTTP Referrer ненадежен). Это будет работать только для запросов, которые поддерживают хранение файлов cookie / jar (например, браузер).

const express = require('express');
const session = require('express-session');
const redirectLoop = require('express-redirect-loop');

const app = express();

app.use(
  session({
    secret: 'test',
    resave: false,
    saveUninitialized: true
  })
);

app.use(redirectLoop());

app.get('/', (req, res) => res.sendStatus(200));
app.get('/bar', (req, res) => res.redirect('/foo'));
app.get('/foo', (req, res) => res.redirect('/foo'));
app.get('/baz', (req, res) => res.redirect('/bar'));

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