Next.js调用WordPress REST API获取当前用户遇Axios认证问题
Next.js + WP JWT 认证问题排查
问题背景
我使用JWT Authentication for WP-API插件生成token,将用户凭证提交至/jwt-auth/v1/token接口后,把token存入cookie并执行以下setState操作:
setAuth({ status: 'SIGNED_IN', user: response.data.user_display_name});
随后在受限页面通过getServerSideProps验证用户有效性:
export const authenticateUser = async (ctx) => { try { const response = await axios.get(`${process.env.NEXT_PUBLIC_API_URL}/wp/v2/users/me`, {}, { headers: { 'Authorization': `Bearer ${token}` } }); // 如果返回正确信息 return { status: 'SIGNED_IN', user: response.data.user} // 否则 return { status: 'SIGNED_OUT', user: null} } } export const getServerSideProps = async context => { // 获取用户信息 const auth = await authenticateUser(context); console.log(auth); // 若用户未认证,重定向到首页 if (auth.status === 'SIGNED_OUT') { return { props: {}, redirect: { destination: "/" }, } } return { props: { user: auth.user } } }
异常表现
在Postman中使用正确的Bearer token请求接口可正常工作,但在Next.js应用中收到如下响应:
{ code: 'rest_not_logged_in', message: '您当前未登录。', data: { status: 401 } }
我还尝试通过用户ID查询用户:
const response = await axios.get(`${process.env.NEXT_PUBLIC_API_URL}/wp/v2/users/${userId}`, {}, { headers: { 'Authorization': `Bearer ${token}` } });
得到的响应为:
{ code: 'rest_user_cannot_view', message: '抱歉,您没有权限查看用户账户列表。', data: { status: 401 } }
排查结果(补充编辑)
经排查,问题源于Axios,改用Fetch API请求即可正常工作。
内容的提问来源于stack exchange,提问作者akio
相关产品推荐
相关产品推荐

