Node.js Passport-jwt 如何在 cookie 中发送令牌

作者:编程家 分类: 编程代码 时间:2025-11-01

在使用Node.js开发Web应用程序时,用户身份验证是一个非常重要的功能。有许多身份验证策略可供选择,其中一种流行的策略是使用Passport.js和JSON Web Tokens(JWT)。Passport.js是一个功能强大的身份验证中间件,而JWT是用于在客户端和服务器之间安全传输信息的开放标准。

Passport-jwt是Passport.js的一个插件,它使用JWT来验证用户的身份。在默认情况下,Passport-jwt会从HTTP请求的头部中提取JWT令牌进行验证。然而,并非所有的应用程序都希望将令牌存储在请求头中,有些应用程序可能更喜欢将令牌存储在cookie中。那么,该如何在cookie中发送Passport-jwt令牌呢?

要在cookie中发送Passport-jwt令牌,我们需要使用Passport.js的`passport-jwt`策略以及`cookie-parser`中间件。下面是一个示例代码,演示了如何在Express应用程序中实现这一功能:

首先,我们需要安装所需的依赖包。在终端中运行以下命令:

npm install passport-jwt cookie-parser

接下来,我们需要在应用程序中引入所需的模块:

javascript

const express = require('express');

const passport = require('passport');

const passportJwt = require('passport-jwt');

const cookieParser = require('cookie-parser');

然后,我们需要配置Passport.js和Passport-jwt:

javascript

const app = express();

app.use(cookieParser());

app.use(passport.initialize());

const JwtStrategy = passportJwt.Strategy;

const ExtractJwt = passportJwt.ExtractJwt;

const jwtOptions = {

jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken(),

secretOrKey: 'your_secret_key'

};

const jwtStrategy = new JwtStrategy(jwtOptions, (payload, done) => {

// 在这里验证令牌的有效性

// 如果令牌有效,将调用done(null, user)传递用户信息

// 如果令牌无效,将调用done(null, false)

});

passport.use(jwtStrategy);

在上述代码中,我们首先通过`cookieParser`中间件来解析请求中的cookie。然后,我们初始化Passport.js并配置Passport-jwt策略。在`jwtOptions`对象中,我们指定了从cookie中提取JWT令牌的方式以及使用的密钥。

接下来,我们需要确保在路由中使用Passport.js进行身份验证。以下是一个示例路由的代码:

javascript

app.get('/protected', passport.authenticate('jwt', { session: false }), (req, res) => {

res.send('您已通过身份验证,可以访问受保护的资源');

});

在上述代码中,`passport.authenticate('jwt', { session: false })`表示使用Passport-jwt策略进行身份验证,不使用Session。只有在通过身份验证后,用户才能访问受保护的资源。

最后,我们需要在登录或注册成功后将JWT令牌存储在cookie中。以下是一个示例代码:

javascript

app.post('/login', (req, res) => {

// 在登录成功后生成JWT令牌

const token = '生成的JWT令牌';

// 将JWT令牌存储在cookie中

res.cookie('jwt', token, { httpOnly: true });

res.send('登录成功');

});

在上述代码中,我们使用`res.cookie`方法将JWT令牌存储在名为"jwt"的cookie中,并使用`httpOnly`选项来设置只能通过HTTP访问该cookie。

Passport-jwt是一个非常有用的插件,可用于在Node.js应用程序中实现JWT身份验证。虽然Passport-jwt默认从请求头中提取JWT令牌,但通过使用Passport.js和cookie-parser中间件,我们可以将JWT令牌存储在cookie中。通过上述示例代码,我们可以在Express应用程序中实现将Passport-jwt令牌发送到cookie的功能。