【发布时间】:2021-05-23 11:54:28
【问题描述】:
我编写了一个身份验证中间件,当它失败时,我想呈现一个页面而不是发送对我的 xhr 请求的响应。怎么办?
const jwt = require('jsonwebtoken')
const User = require('../models/users')
const express = require('express')
const auth = async (req, res ,next) => {
try {
//res.render("404")
const token = req.header('Authorization').replace('Bearer ' , '') //token comes from client in the header section named Auth(here)
const data = jwt.verify(token , 'itistechvaulttoken') //this gives back the id of the user and also iat :- issued at , a callback can be attached to
// .verify :-- see jsonwebtoken documentation for details .
const user = await User.findOne({ _id : data._id})
if(!user) {
throw new Error()
}
req.token = token //this is being use mainly for logout route handler
req.user = user
next()
} catch(e) {
res.status(401).render("404")
}
}
module.exports = auth
我已经创建了一个表单并使用 xhr 请求将数据发送到我的后端进行路由,然后我将其重定向到另一个我想要呈现视图的路由。
我的路线:-
router.post('/users' ,async (req, res) => {
console.log("Request Recieved")
const user = new User(req.body)
try {
await user.save()
const token = await user.generateAuthToken()
//console.log(token)
//res.status(201).send({ user , token})
req.accesstoken = token
res.redirect(302 , "/users/me" )
}
catch(e) {
console.log(e)
res.status(400).send("User not created" + e)
}
})
/用户/我:-
router.get('/users/me', auth, async (req, res) => {
console.log("in users/me")
res.send(req.user)
})
我知道这里的身份验证必须失败,并且中间件捕获的代码应该运行,我正在尝试渲染视图但失败。
【问题讨论】:
-
很难理解你要求/想要达到的目标。
标签: node.js express authentication xmlhttprequest middleware