连接NextJS前端和laravel后端

z4bn682m  于 2023-01-31  发布在  其他
关注(0)|答案(1)|浏览(187)

我正在使用nextjs frontend连接具有rest apis的laravel后端。我在路由验证时遇到问题。在登录时响应包含jwt令牌,我将其存储在localStorage中。公共apis工作正常,但受保护的apis不工作,因为我无法在标头中提供jwt。我正在使用axios与react-query沿着发出请求。

API.js'

import axios from "axios";
if(typeof window !== "undefined"){
    var token = localStorage.getItem("token");
}

const api = axios.create({
    baseURL: "http://<server ip address>:8000/api/v1/",
    headers: {
        "Authorization": `Bearer ${token}`
    }
});

export default api;

'请求

const {data, isLoading, isError, error, isSuccess} = useQuery("user", getUser);

获取用户

import api from "@api/index";

const getUser = async () => {
    try {
        const res = await api.get("user/me");
        return {status: res.status, data: res.data};
    } catch (error) {
        if(error.response && error.response.data.message){
            return {status: error.response.status, message: error.response.data.message};
        }else{
            return {message: error.message};
        }
    }
}

export default getUser;

当我检查网络选项卡时。我得到了授权:请求标头中的“空承载”。是否有任何方法可以做到这一点。提前感谢。
我认为在获取令牌时出现错误,所以我有条件地查询了localStorage。您可以在api.js中看到,但它仍然为空。

rhfm7lfc

rhfm7lfc1#

我找到了一个办法:
现在我在cookies-next npm包的帮助下将令牌存储在cookie中。没有此包也可以执行此操作
因为它存储在cookie中,我可以从context.req.cookies.cookie_name访问getServerSideProps内部,或者如果您也要使用cookies-next,您可以使用getCookie("cookie_name", {context.req, context.res})
:)

相关问题