Как не ввести маршрут или конечную точку без входа в систему nodejs? - PullRequest
1 голос
/ 09 марта 2020

Я пытаюсь создать приложение, конечная точка которого, скажем, B, я хочу охватить только тогда, когда учетные данные пользователя действительны. Итак, после того, как я завершил аутентификацию, я перенаправил пользователя в конечную точку B. Но, к моему удивлению, в моем приложении я могу напрямую ввести конечную точку B без входа в систему. Что я должен сделать, чтобы избежать этого? У моего приложения есть только логин, нет выхода, и каждый раз, когда пользователь хочет посетить конечную точку B, я хочу, чтобы пользователь входил в систему. Даже если пользователь попытается go к этой конечной точке вручную, я хочу, чтобы пользователь перенаправил на логин, что мне делать?

1 Ответ

0 голосов
/ 10 марта 2020

Чтобы не разрешить доступ к указанному c маршруту http://localhost: 3000 / B , вы можете определить функции проверки подлинности перед основной функцией для этой конечной точки, а затем прервать последовательность выполнения функции завершив запрос в функциях аутентификации, не позволяя вызывать основную функцию.

Более подробное объяснение:

При определении маршрута ( LINE 27 ) вы можете применить много функций, которые будут вызываться последовательно, но если в одной из этих функций вы завершите sh запрос ( req ), то следующие объявленные функции не будут вызываться, делая основную функцию недоступной;

Когда вы получите запрос в Express, в качестве третьего аргумента вы получите обратный вызов, который вызовет функцию next в определенной цепочке ( LINE 8, 17 )

Пример аутентификации с использованием узла | express:

const express = require('express')
const app = express()
const port = 3000

const authentication = (req, res, next) => {
  // todo verify authentication
  if (true) {
    next() // LINE 8
  } else {
    res.status(401).json({message: 'not authenticated'}) // LINE 10
  }
}

const authorization = (req, res, next) => {
  // todo verify authorization
  if (true) {
    next() // LINE 17
  } else {
    res.status(401).json({message: 'not authorized'}) // LINE 19
  }
}

app.get('/', (req, res) => res.send('Hello World!'))

app.post('/login', (req, res) => res.send({token: 'magic-jwt-token'}))

app.get('/B', authentication, authorization, (req, res) => res.send('B works!')) // LINE 27

app.listen(port, () => console.log(`Example app listening on port ${port}!`))
...