如何将自定义标头附加到 SessionProvider 中的 /api/auth/session GET 请求?

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

我正在尝试使用下一个身份验证中的 SessionProvider,如下所示:

"use client";

import { SessionProvider } from "next-auth/react";

export function MySessionProvider({ children, session }) {
    return (
        <SessionProvider session={session}>
            {children}
        </SessionProvider>
    );
};

然后我在主布局中使用它。

在幕后 SessionProvider 向 /api/auth/session 发出 GET 请求。 我在文档中找不到如何调整客户端此类请求的行为。

我确实需要向该请求附加一个额外的 HTTP 标头。我正在尝试发送实际的设备指纹以在我的会话 API 中进行自定义检查。

next.js
1个回答
0
投票

好吧,我决定只编写自己的上下文提供程序而不是 SessionProvider:

"use client";
import { createContext, useContext, useState, useEffect } from "react";
import { useFetchGet } from "@hooks/frontendRequests";
import projectPaths from "@utils/projectPaths";

const UserContext = createContext("");

export function UserContextProvider({ children }) {
    const [user, setUser] = useState({});
    const fetchResult = useFetchGet(projectPaths.API_USERS + "/self");


    useEffect(() => {
        if (fetchResult.user) {
            setUser(fetchResult.user);
        }
    }, [fetchResult]);

    return (
        <UserContext.Provider value={{ user, setUser }}>
            {children}
        </UserContext.Provider>
    );
}

export function useUserContext() {
    const context = useContext(UserContext);
    if (!context) {
        throw new Error("useUserContext must be used within UserContextProvider.");
    }
    return context;
}

useFetchGet
设置所有必要的标头,我的自定义 API 端点不仅检查会话,还会在成功时返回有用的负载。 如果会话出现问题,服务器将返回错误 401,我的前端
useFetchGet
功能将通过在客户端重新路由来处理它。

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