You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Laravel Auth Sanctum API在React Native中获取当前登录用户数据

解决Laravel Sanctum + React Native 获取登录用户数据失败的问题

一、修复Laravel路由冲突

你当前定义了两个重复的/user GET路由,后一个会覆盖前一个。而且不带auth:sanctum中间件的路由根本无法获取登录用户——Sanctum必须通过中间件验证请求中的令牌才能识别用户。

只保留带中间件的路由即可,删除第二个无效路由:

// api.php
Route::middleware('auth:sanctum')->get('/user', function (Request $request) {
    return $request->user();
});

二、修复React Native请求逻辑

你的axios请求没有携带认证令牌,导致Laravel无法识别当前登录用户,所以返回空数据。另外还有两个细节问题需要修正:

import { useState, useEffect } from 'react';
import AsyncStorage from '@react-native-async-storage/async-storage';
import axios from 'axios';

// 配置axios基础地址,替换成你的Laravel API实际地址
axios.defaults.baseURL = 'http://你的Laravel服务器IP:端口';

const ProfileScreen = () => {
  const [user, setUser] = useState({});

  const getUser = async () => {
    try {
      const token = await AsyncStorage.getItem('auth_token');
      if (!token) {
        console.log('未找到用户认证令牌');
        return;
      }
      // 请求时携带Authorization头,将令牌传给Laravel
      const res = await axios.get("/api/user", {
        headers: {
          'Authorization': `Bearer ${token}`
        }
      });
      console.log(res.data);
      setUser(res.data);
    } catch (e) {
      // 打印更详细的错误信息,方便排查
      console.log('请求失败:', e.response?.data || e.message);
    }
  };

  // 添加空依赖数组,避免组件重复渲染时无限调用getUser
  useEffect(() => {
    getUser();
  }, []);

  return (
    // 你的界面渲染代码
    <></>
  );
};

export default ProfileScreen;

三、额外排查点

  • 确认用户登录时,你已经将Sanctum返回的令牌正确存入了AsyncStorage的auth_token键中。
  • 如果Laravel和React Native不在同一域名/IP下,需要修改Laravel的config/cors.php配置:
// cors.php
return [
    'paths' => ['api/*', 'sanctum/csrf-cookie'],
    'allowed_methods' => ['*'],
    'allowed_origins' => ['http://你的React Native调试地址'],
    'allowed_headers' => ['*'],
    'supports_credentials' => true,
];

内容的提问来源于stack exchange,提问作者motionless570

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 08:55:19