使用JWT API验证Sveltekit并使用cookies。
首先,需要安装依赖包jsonwebtoken和cookie:
npm install jsonwebtoken cookie
然后在服务端(Sveltekit的api目录或api路由文件)创建一个login.js文件,用于验证用户登录信息并创建JWT token:
import jwt from 'jsonwebtoken';
import cookie from 'cookie';
// 验证用户登录信息,返回一个用户对象或null
function login(username, password) {
// TODO: 验证过程
}
export async function post(req, res) {
const { username, password } = req.body;
// 验证登录信息
const user = await login(username, password);
if (!user) {
return res.status(401).json({ error: 'Unauthorized' });
}
// 创建JWT token
const token = jwt.sign({ sub: user.id }, 'mysecret');
// 设置cookie
res.setHeader('Set-Cookie', cookie.serialize('token', token, {
httpOnly: true,
secure: process.env.NODE_ENV === 'production',
sameSite: 'strict',
maxAge: 3600, // 1小时
path: '/',
}));
// 返回用户对象
return res.json({ user });
}
其中,在验证登录信息后,jwt.sign
函数会根据用户的id创建一个JWT token,cookie.serialize
函数将token设置为cookie,最后将用户对象返回给客户端。
接着,在服务端的middleware(Sveltekit的hooks目录下的js文件)中添加一个verifyToken
函数,用于验证JWT token:
import jwt from 'jsonwebtoken';
import cookie from 'cookie';
function verifyToken(token) {
try {
const user = jwt.verify(token, 'mysecret');
return user;
} catch (err) {
return null;
}
}
export function handle({ request, resolve }) {
const cookies = cookie.parse(request.headers.cookie || '');
const token = cookies.token;
// 验证token
const user =