关于用户令牌的检索

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

无法从标头检索令牌,JWT 令牌未存储在 cookie 存储中,因为我无法从本地存储检索用户信息。 我正在从 jwt 令牌检索用户信息,当我遇到一个独特的错误时,当我编写代码时,它给出的输出为未定义,并且存储在标头下的 cookie 似乎不正确。我这样做是因为我想从令牌中检索用户电子邮件。除此之外,数据没有存储在 cookie 存储中,如果您问我为什么使用 cookie 存储,那是因为我没有得到如何从本地存储获取令牌的解决方案。最有趣的是,当我在雷霆客户端中运行它时,生成了正确的结果,但是当从浏览器调用令牌时,输出是未定义的。代码和令牌如下所述

将 cookie 存储在 cookie 存储中的代码,但它没有存储在 cookie 存储中

router.post('/signin',async(req,res)=>{
// some more validation need to be done
// like if the user exist and if so is the password correct
// creating signup logic

console.log("reached signin page successfully");

const email = req.body.email;
const password = req.body.password;
const users = await User.findOne({
    email
})


if(users)
{
    console.log("successfully logged in")
    const passcompare = password === users.password;
    if(passcompare)
    {  
        const token = jwt.sign
        (
            email
        ,JWT)

        // res.json
        // ({
        //     success:true,
        //     msg:token
        // })
        
        res.status(200);
        res.cookie("cookie",token,
        {httpOnly:true
        // secure:process.env.NOD_ENV==="production",
        // maxAge:1000,
        // signed:true,
        }
    )

        res.json({
            success:true,
            token
        });
    }   
    else
    {
        res.json
        ({
            success:false,
            msg: "password incorrect"
        })
    }
 }
 else
 {
    res.json({
        success:false,
        msg:"No user found With the above credentials"
    })
 }

})

// Now using middlewere here 

router.get('/signinn',fetchuser,async (req,res)=>
{
// const autheader = req.headers.token;
// console.log("Token value is ", autheader);
console.log("reached signnn");
let userdata = await User.findOne({
 email:req.email
})

if(userdata)
{
    res.json({
        userdata
    })
 }
})

// middleware 

const fetchuser = async (req,res,next)=>
{
console.log("reached middleware")
const token2 = req.headers.token;
// const token2 = req.cookies.cookie; 
// console.log(token2)
if(!token2)
{
    res.status(401)
    .send
    ({
        msg:"No token found"
    })
}
else
{
    try
    {
        const data = jwt.verify(token2,JWT);
        req.email = data;   
        next();
    }
    catch(error)
    {
        res.status(401)
        .send
        ({
            msg:"No token found"
        })
    }
  }
}

// 获取数据的前端代码

const [username,setusername] = useState()

useEffect(()=>{
fetch('http://localhost:4000/user/signinn')
.then((response)=>response.json())
.then((data)=>setusername(data))

},[])
console.log("hello",username);

这是标题部分的输出 不知道这是什么

cookie=eyJh%---some more text ------% dRNc3d4Y7o; Path=/; HttpOnly`
reactjs node.js cookies backend web-developer-toolbar
1个回答
0
投票

是的,我终于找到答案了。 答案是,我们可以使用以下代码获取令牌,然后将令牌存储到文件中。中间件将从文件中读取令牌,使用“密钥”验证令牌,并将输出作为电子邮件提供给我们。 以下是我用来从浏览器获取令牌的代码。

将此代码包含在 require 部分。

var LocalStorage = require('node-localstorage').LocalStorage;
localStorage = new LocalStorage('./scratch');

它将创建名为scratch的文件夹

localStorage.setItem("token1",token);

这将在scratch文件夹中创建一个名为token1的文件,其值为token。 该部分必须放在生成令牌的部分下,以便它可以捕获令牌值并传递到文件 token1 进行存储。

const token2 = localStorage.getItem('token1')

这将获取 token1(之前存储在 token1 文件中)值并存储在 token2 中

现在您有了令牌,验证它并获取用户的详细信息。

如果还有其他解决方案请提供给我。

希望这会有所帮助!

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