首页 > 解决方案 > JWT - req.cookies 未定义

问题描述

[声明 - 我在 2 小时前发布了关于这个话题的帖子,但实际上,我的要求并不足以让你理解我的挣扎。我可以编辑,但你们中的许多人不会看到更新。然后我在这里添加了很多内容。如果重新发布不是一个好习惯,我深表歉意。]

我想知道关于检索 req.cookies 中存在的值的当前代码有什么问题。

用户登录成功后,我将 cookie 中的访问令牌发送到用户的浏览器(如下所示)

来自开发工具的屏幕截图

一旦用户登录,他就会被重定向到另一个页面,此时我的 Node/TS API 中的中间件会检查他是否有权。这是MW的代码

import {Request, Response, NextFunction} from 'express'
const jwt = require('jsonwebtoken');

export default function authToken(req: Request, res: Response, next: NextFunction) {
    const authCookies = req.cookies['auth-token']
    console.log('authCookies', authCookies)

    const token = authCookies && authCookies.split(' ')[1]

    if (token == null) return res.sendStatus(401) // unvalid
    
    jwt.verify(token, process.env.ACCESS_TOKEN_SECRET, (err: any, user: any) => {
        
        if (err)return res.sendStatus(403) // no longer valid

        res.locals = {
            ...res.locals,
            token: user
        };
        next()
    })
} 

我只得到一个未定义的输出const authCookies = req.cookies['auth-token'],我不明白为什么

此外,req 的摘录

  body: {},
  secret: undefined,
  cookies: [Object: null prototype] {},
  signedCookies: [Object: null prototype] {},
  route: Route {
    path: '/main/wallet',
    stack: [ [Layer], [Layer] ],
    methods: { get: true }
  },

这是我声明我的令牌的方式

            const accessToken = jwt.sign({id: existingUser.id}, process.env.ACCESS_TOKEN_SECRET, { expiresIn: '15s' })
            res.cookie('auth-token', accessToken, { httpOnly: true });

我的 Index.ts 设置

app.use(cors({credentials: true, origin: 'http://localhost:8080'}))
app.use(express.json());
app.use(cookieParser());

我如何在 React 中处理它

     axios({
        method: 'post',
        url,
        data: store.getState().user.signInData,
        withCredentials: true,
      })
        .then((res) => {
          dispatch(loginSuccess(res.data));
          dispatch(getMainWallet(res.data.id));
        })

标签: reactjstypescriptcookiesjwt

解决方案


推荐阅读