我正在使用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中看到,但它仍然为空。
1条答案
按热度按时间rhfm7lfc1#
我找到了一个办法:
现在我在
cookies-next
npm包的帮助下将令牌存储在cookie中。没有此包也可以执行此操作因为它存储在cookie中,我可以从
context.req.cookies.cookie_name
访问getServerSideProps
内部,或者如果您也要使用cookies-next
,您可以使用getCookie("cookie_name", {context.req, context.res})
。:)