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

全新Laravel Sanctum API异常重定向至/dashboard路由问题排查

解决Laravel Sanctum API注册/登录后重定向到dashboard的问题

这不是Sanctum的Bug,是Laravel默认的认证控制器(比如RegisterController、LoginController)继承的AuthenticatesUsers、RegistersUsers trait中,默认配置了登录/注册成功后的Web端重定向路径,而你的纯API场景不需要这套逻辑。

修复方案

1. 自定义认证控制器的响应逻辑

如果你用了Laravel自带的Auth脚手架生成的控制器,直接修改app/Http/Controllers/Auth下的对应文件,替换默认的重定向行为:

  • 注册控制器(RegisterController):
    重写create方法,直接返回JSON响应:

    protected function create(array $data)
    {
        $user = User::create([
            'name' => $data['name'],
            'email' => $data['email'],
            'password' => Hash::make($data['password']),
        ]);
    
        // 返回API格式的注册成功响应
        return response()->json([
            'message' => '注册成功',
            'user' => $user,
            'token' => $user->createToken('API Token')->plainTextToken
        ], 201);
    }
    
  • 登录控制器(LoginController):
    重写authenticated方法,返回JSON响应:

    protected function authenticated(Request $request, $user)
    {
        return response()->json([
            'message' => '登录成功',
            'user' => $user,
            'token' => $user->createToken('API Token')->plainTextToken
        ]);
    }
    

2. 调整RouteServiceProvider的默认配置

在app/Providers/RouteServiceProvider.php中,默认的HOME常量被设为/dashboard,这是Web端的重定向目标。可以修改它适配API场景,或者保持原样(只要控制器不依赖这个常量即可):

// 原代码
public const HOME = '/dashboard';

// 修改为API路径示例
public const HOME = '/api/user';

3. 编写纯API专用的认证逻辑(更推荐)

如果是纯API项目,建议放弃Web Auth脚手架,手动编写API路由和控制器:

在routes/api.php中定义路由:

use App\Http\Controllers\Auth\ApiAuthController;

Route::post('/register', [ApiAuthController::class, 'register']);
Route::post('/login', [ApiAuthController::class, 'login']);

创建ApiAuthController,完全自定义认证逻辑:

namespace App\Http\Controllers\Auth;

use App\Models\User;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Auth;

class ApiAuthController extends Controller
{
    public function register(Request $request)
    {
        $validated = $request->validate([
            'name' => 'required|string|max:255',
            'email' => 'required|string|email|max:255|unique:users',
            'password' => 'required|string|min:8|confirmed',
        ]);

        $user = User::create([
            'name' => $validated['name'],
            'email' => $validated['email'],
            'password' => Hash::make($validated['password']),
        ]);

        return response()->json([
            'message' => '注册成功',
            'user' => $user,
            'token' => $user->createToken('API Token')->plainTextToken
        ], 201);
    }

    public function login(Request $request)
    {
        $validated = $request->validate([
            'email' => 'required|string|email',
            'password' => 'required|string',
        ]);

        if (!Auth::attempt($validated)) {
            return response()->json([
                'message' => '邮箱或密码错误'
            ], 401);
        }

        $user = User::where('email', $validated['email'])->firstOrFail();

        return response()->json([
            'message' => '登录成功',
            'user' => $user,
            'token' => $user->createToken('API Token')->plainTextToken
        ]);
    }
}

这样就完全脱离Web端的重定向逻辑,适配纯API场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 11:02:09