文员身份验证 - 401 未经授权,尽管 React 应用程序中的会话令牌有效

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

问题:我在 React 应用程序中使用 Clerk 身份验证来管理用户身份验证。用户成功登录后,我尝试向后端 (Express.js) 发出 API 请求,但我不断收到 401 未经授权的响应。我已验证 Clerk 会话处于活动状态,并且授权令牌似乎在请求标头中正确传递。

详情

  • API端点
    http://localhost:3000/api/test
  • 预期结果:如果令牌有效,则会收到成功的响应。
  • 实际结果
    401 Unauthorized
    来自后端的响应。
  • 令牌行为:我还看到对 Clerk 的令牌端点和触摸端点的多个不必要的请求,这表明令牌管理存在潜在问题。

这是我发送请求的前端:


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")
})

Here is the Screenshot of my Network console of browser

reactjs express authentication react-fullstack clerk
1个回答
0
投票

问题是由于 jwt 令牌过期而出现的,这是由于系统计时错误而发生的。一旦修复,令牌就不会过期,问题就解决了

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