为什么授权头不通过重定向传递?

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

我尝试通过重定向传递标头。由于某种原因,我在重定向路径的响应标头中未获得任何值。我尝试通过Express包将令牌的标头通过一条路由传递到另一条路由,然后作为答案的结果将其发送到GET响应。在客户端,我应该获取令牌并将其保存。

我得到了使用JWT生成令牌并将其保存在标头中的路径“ / users / login”。之后,使用重定向到“ / flights /”,我尝试访问标题,但标题“ token”不存在。在登录路由中,标题存在。

这里是“ /用户/登录”路径的代码

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

这里是“ /航班/”航线的代码

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);}

谢谢!

node.js express server-side
1个回答
0
投票

只需执行以下操作:

 jwt.verify(req.headers.token,"havhav",(err,decoded)=>{
    if(err) res.status(403).send(err)
    else
    {
        req.accesstoken=token;
        next()
    }
});

然后您可以使用req.accesstoken在路线中获得它>

© www.soinside.com 2019 - 2024. All rights reserved.