如何在不登录nodejs的情况下不输入路线或终点?

问题描述 投票:1回答:1

我正在尝试构建一个我以端点为终点的应用程序,比方说B,我只想在用户凭据有效时联系我。因此,在完成身份验证之后,我将用户重定向到端点B。但令我惊讶的是,我无需登录即可直接输入B端点。我该怎么做才能避免这种情况?我的应用程序只有登录名,没有注销,并且每次用户要访问端点B时,我都希望用户登录。即使用户尝试手动转到该端点,我也希望用户重定向到登录名,我该怎么办?

node.js express authentication authorization
1个回答
0
投票

[不允许访问特定路由http://localhost:3000/B,您可以在该端点的主要功能之前定义auth验证功能,然后通过终止auth功能中的请求(不允许主要功能)来中断功能执行顺序被称为。

更详细的解释:

虽然定义路由(LINE 27),您可以应用许多将被顺序调用的函数,但是如果在其中一个函数中您完成了请求(req),则下一个声明的函数不会将被调用,从而使主要功能无法访问;

当您在Express中收到请求时,您将收到作为回调的第三个参数,该回调将在定义的链中调用next函数(LINE 8,17

使用节点|表达进行身份验证的示例:

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}!`))
© www.soinside.com 2019 - 2024. All rights reserved.