Экспресс промежуточное ПО

avatar
Bipin Gosain
8 апреля 2018 в 04:35
335
1
1

Я новичок в среде Express, и у меня возникли некоторые трудности с потоком кода. У меня есть следующий код в app.js

app.use('/', index);
app.use('/login', login);
app.use(require('./routes/authenticate_user'))
app.use('/user', userDetails);

Проблема в том, что если пользователь вводит недопустимый маршрут, предположим, что «/неправильный», тогда мое промежуточное ПО отправляет ответ вместо того, чтобы приложение выдавало 404 Not found. Я что-то упускаю? (выглядит очевидным). Спасибо за любую помощь.

Источник
Bipin Gosain
8 апреля 2018 в 04:52
0

Да, извините, что не указал это в первую очередь. Это промежуточное программное обеспечение должно убедиться, что пользователь передал токен доступа в заголовках запроса или нет.

jfriend00
8 апреля 2018 в 04:59
0

Ну, вы должны решить, что вы хотите, чтобы произошло в этом случае. Мне кажется, что отправка статуса о том, что они не авторизованы должным образом (даже если это /wrong), является правильным дизайном. Это также не позволяет неавторизованным пользователям узнать что-либо о ваших URL-адресах и о том, какие из них работают, а какие нет.

Bipin Gosain
8 апреля 2018 в 05:03
0

Но проблема все еще существует. Есть ли способ предварительно проверить маршруты? Если бы я мог. Или есть другой подход к этому.

jfriend00
8 апреля 2018 в 05:07
0

Какая проблема еще есть? Я не предлагал тебе что-то менять. Я думаю, что это правильный дизайн. Если вы хотите проверять только совпадающие маршруты, вам может потребоваться установить промежуточное ПО вручную для каждого отдельного маршрута. app.use('/user', require('./routes/authenticate_user'), userDetails);

Bipin Gosain
8 апреля 2018 в 05:12
0

Ok. Спасибо за быстрые ответы, думаю, так и должно было быть

Ответы (1)

avatar
jfriend00
8 апреля 2018 в 06:36
3

Есть несколько вариантов того, как/где запускать ПО промежуточного слоя аутентификации.

1) Вы можете запустить его сразу же после того, как будут определены любые неаутентифицированные маршруты. Это даст вам ошибку отсутствия аутентификации для любого маршрута, будь то реальный маршрут или нет, кроме нескольких маршрутов, на которые пользователю разрешено переходить без аутентификации.

2) Вы можете вручную добавить промежуточное ПО к каждому определенному маршруту, который должен иметь аутентификацию, например:

app.get('/something', yourAuthMiddleware, yourRouteHandler);

Это запустит проверку авторизации только на фактически определенных маршрутах. Это позволяет вам выдавать ошибку 404, а не ошибку авторизации для маршрутов, которые не определены.

Преимущество первого варианта (который, по сути, у вас есть сейчас) заключается в том, что неаутентифицированный пользователь даже не может узнать, какие маршруты определены, а какие нет. Если они не аутентифицированы, они вообще не входят, за исключением пары маршрутов, на которые им разрешено. На мой взгляд, это правильный дизайн.

Второй вариант позволяет указать ошибку 404 для маршрута, который не определен, но требует ручного добавления аутентификации к каждому маршруту или к каждому маршрутизатору, для которого требуется аутентификация. Это позволяет пользователю, не прошедшему проверку подлинности, узнать, какие маршруты определены, а какие нет.

ŞükSefHam
8 апреля 2018 в 09:07
0

Привет, друг, я хочу использовать экспресс-среду.. вот так: app.get('/finduser',function(req,res){

jfriend00
8 апреля 2018 в 09:14
0

@ŞükSefHam - Пожалуйста, задайте свой вопрос. Затем вы можете показать свой код и объяснить свою проблему/вопрос.

ŞükSefHam
8 апреля 2018 в 09:23
0

Я не могу задать вопрос :), но я хочу узнать: я хочу использовать экспресс-мидлле.. вот так: `app.get('/finduser',function(req,res){user.find{},function(err, результат){res.render('./users.ejs',{пользователь:результат.....` это верно?

jfriend00
8 апреля 2018 в 09:31
0

@ŞükSefHam — Вы можете задавать вопросы и отвечать на них, как только присоединитесь к нам. Пожалуйста, задайте свой вопрос. Это не по теме, чтобы попытаться задать вопрос в комментариях к другому ответу.

ŞükSefHam
8 апреля 2018 в 09:32
0

Stackover не позволяет мне? :)

jfriend00
8 апреля 2018 в 09:34
0

@ŞükSefHam - Ну, на этой странице о привилегиях у вас более чем достаточно привилегий, чтобы задать свой вопрос.

ŞükSefHam
8 апреля 2018 в 09:34
0

Я получаю сообщение об ошибке: Вы достигли лимита вопросов. Извините, мы больше не принимаем вопросы от этого аккаунта.

jfriend00
8 апреля 2018 в 09:36
0

@ŞükSefHam - не знаю. Может быть, выйдите из системы, затем войдите снова. Но, в любом случае, вы не можете задавать вопросы здесь, в комментариях.

ŞükSefHam
8 апреля 2018 в 09:37
0

Но так же, как и этот вопрос. Он или она использует файл маршрута, но я не хочу использовать файл маршрута :)

jfriend00
8 апреля 2018 в 16:25
0

@BipinGosain — если это ответ на ваш вопрос, вы можете сообщить об этом сообществу, щелкнув галочку слева от ответа. Это также принесет вам очки репутации при переполнении стека. К вашему сведению, ваш предыдущий комментарий, вероятно, был адресован не тому человеку.

Bipin Gosain
8 апреля 2018 в 16:29
0

@jfriend00, извини за это. И спасибо за четкую расстановку точек.