为什么授权 header 不通过重定向?
Why authorised header is not pass through redirect?
我尝试通过重定向传递 header。出于某种原因,我在重定向路径的响应 header 中没有得到任何值。
我尝试通过 Express 包将 header 的令牌通过一条路由传递到另一条路由,然后将其作为答案发送到 GET 响应。在客户端,我应该获取令牌并保存它。
我得到了使用 JWT 生成令牌的路径“/users/login”,然后将其保存在 header 中。之后使用重定向到“/flights/”,我尝试访问 header 但 header "token" 不存在。在登录路径中存在header。
这里是“/users/login”路线的代码
const express = require('express')
const router = express.Router()
const jwt = require('jsonwebtoken')
const bcryptjs = require('bcryptjs')
const user={}
const vt =(req,res,next)=>{
if(req.headers.token)
jwt.verify(req.headers.token,"havhav",(err,decoded)=>{
if(err) res.status(403).send(err)
else{
next()
}
})
else{
bcryptjs.compare(req.body.pass,user.pass,(err,result)=>{
if(err) throw err
if(result){
jwt.sign({
username:user.username
}, 'havhav', (err, token) => {
if (err) throw err
res.header('token', token)
next()
})
}
else
res.status(403).send("unauthorized")
})
}
}
router.post('/login',vt,(req,res)=>{
res.redirect(307,'/flights')
})
module.exports = router
这里是“/flights/”航线的代码
const express = require('express')
const router = express.Router()
router.post("/",(req,res)=>{
res.send("welcome to flights")
})
module.exports = router
这里是客户端
try{
let data = await fetch('http://localhost:3000/users/login',
{
method: 'POST', // *GET, POST, PUT, DELETE, etc.
headers: {
'Content-Type': 'application/json'
// 'Content-Type': 'application/x-www-form-urlencoded',
},
body: JSON.stringify({"username":"idan","pass":"123456"})
}
)
console.log(data);
}
catch(err) {console.log(err);}
谢谢!
只需将此代码粘贴到一个单独的文件中,比如 vt.js 并导出它。
const express = require('express')
const router = express.Router()
const jwt = require('jsonwebtoken')
const bcryptjs = require('bcryptjs')
const user={}
const vt =(req,res,next)=>{
if(req.headers.token)
jwt.verify(req.headers.token,"havhav",(err,decoded)=>{
if(err) res.status(403).send(err)
else{
next()
}
})
else{
bcryptjs.compare(req.body.pass,user.pass,(err,result)=>{
if(err) throw err
if(result){
jwt.sign({
username:user.username
}, 'havhav', (err, token) => {
if (err) throw err
res.header('token', token)
next()
})
}
else
res.status(403).send("unauthorized")
})
}
}
module.exports=vt;
然后在登录页面:
const express = require('express')
const router = express.Router()
const middlecheck=require('./vt.js');
router.post('/login',middlecheck.vt,(req,res)=>{
res.redirect(307,'/flights')
})
module.exports = router;
然后在“/flights/”路线
const express = require('express')
const router = express.Router()
const middlecheck=require('./vt.js');
router.post("/",middlecheck.vt(req,res)=>{
res.send("welcome to flights")
});
module.exports = router;
然后你可以在路由中使用req.accesstoken
获取它
我尝试通过重定向传递 header。出于某种原因,我在重定向路径的响应 header 中没有得到任何值。 我尝试通过 Express 包将 header 的令牌通过一条路由传递到另一条路由,然后将其作为答案发送到 GET 响应。在客户端,我应该获取令牌并保存它。
我得到了使用 JWT 生成令牌的路径“/users/login”,然后将其保存在 header 中。之后使用重定向到“/flights/”,我尝试访问 header 但 header "token" 不存在。在登录路径中存在header。
这里是“/users/login”路线的代码
const express = require('express')
const router = express.Router()
const jwt = require('jsonwebtoken')
const bcryptjs = require('bcryptjs')
const user={}
const vt =(req,res,next)=>{
if(req.headers.token)
jwt.verify(req.headers.token,"havhav",(err,decoded)=>{
if(err) res.status(403).send(err)
else{
next()
}
})
else{
bcryptjs.compare(req.body.pass,user.pass,(err,result)=>{
if(err) throw err
if(result){
jwt.sign({
username:user.username
}, 'havhav', (err, token) => {
if (err) throw err
res.header('token', token)
next()
})
}
else
res.status(403).send("unauthorized")
})
}
}
router.post('/login',vt,(req,res)=>{
res.redirect(307,'/flights')
})
module.exports = router
这里是“/flights/”航线的代码
const express = require('express')
const router = express.Router()
router.post("/",(req,res)=>{
res.send("welcome to flights")
})
module.exports = router
这里是客户端
try{
let data = await fetch('http://localhost:3000/users/login',
{
method: 'POST', // *GET, POST, PUT, DELETE, etc.
headers: {
'Content-Type': 'application/json'
// 'Content-Type': 'application/x-www-form-urlencoded',
},
body: JSON.stringify({"username":"idan","pass":"123456"})
}
)
console.log(data);
}
catch(err) {console.log(err);}
谢谢!
只需将此代码粘贴到一个单独的文件中,比如 vt.js 并导出它。
const express = require('express')
const router = express.Router()
const jwt = require('jsonwebtoken')
const bcryptjs = require('bcryptjs')
const user={}
const vt =(req,res,next)=>{
if(req.headers.token)
jwt.verify(req.headers.token,"havhav",(err,decoded)=>{
if(err) res.status(403).send(err)
else{
next()
}
})
else{
bcryptjs.compare(req.body.pass,user.pass,(err,result)=>{
if(err) throw err
if(result){
jwt.sign({
username:user.username
}, 'havhav', (err, token) => {
if (err) throw err
res.header('token', token)
next()
})
}
else
res.status(403).send("unauthorized")
})
}
}
module.exports=vt;
然后在登录页面:
const express = require('express')
const router = express.Router()
const middlecheck=require('./vt.js');
router.post('/login',middlecheck.vt,(req,res)=>{
res.redirect(307,'/flights')
})
module.exports = router;
然后在“/flights/”路线
const express = require('express')
const router = express.Router()
const middlecheck=require('./vt.js');
router.post("/",middlecheck.vt(req,res)=>{
res.send("welcome to flights")
});
module.exports = router;
然后你可以在路由中使用req.accesstoken