问题:我在 React 应用程序中使用 Clerk 身份验证来管理用户身份验证。用户成功登录后,我尝试向后端 (Express.js) 发出 API 请求,但我不断收到 401 未经授权的响应。我已验证 Clerk 会话处于活动状态,并且授权令牌似乎在请求标头中正确传递。
详情:
http://localhost:3000/api/test
401 Unauthorized
来自后端的响应。这是我发送请求的前端:
const Homepage = () => {
const test = async () => {
await fetch("http://localhost:3000/api/test", {
credentials: "include",
});
};
return (
<div className='homepage'>
<Link to="/dashboard">Get Started</Link>
<button onClick={test} >TEST BACKEND</button>
</div>
)
}
export default Homepage
这是我的 Express 后端:
import express from "express";
import dotenv from 'dotenv';
import cors from "cors";
import {ClerkExpressRequireAuth} from "@clerk/clerk-sdk-node";
dotenv.config();
const port = process.env.PORT || 3000;
const app = express();
app.use(cors({
origin: process.env.CLIENT_URL,
credentials:true,
}))
app.use(express.json())
app.get("/api/test", ClerkExpressRequireAuth(), (req,res)=>{
const userId = req.auth.userId;
console.log(userId);
res.send("Success!")
})
app.use((err, req, res, next) => {
console.error(err.stack)
res.status(401).send('Unauthenticated!')
})
app.listen(port, ()=>{
connect()
console.log("Server running on 3000")
})
问题是由于 jwt 令牌过期而出现的,这是由于系统计时错误而发生的。一旦修复,令牌就不会过期,问题就解决了