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

Laravel Passport登录成功后Auth::check()返回false是什么原因?

问题原因

Passport 的 createToken() 方法仅负责生成合法的访问令牌,不会自动将用户实例挂载到当前请求的 Auth 门面中。你当前发送的登录请求本身没有携带有效 Token,使用 Passport 驱动的 api guard 会默认判定为未登录状态,所以 Auth::check() 返回 false 是符合设计逻辑的,不是代码运行异常。

解决方法

1. 当前登录请求需要获取登录状态

如果你需要在当前登录请求的生命周期内调用 Auth 相关方法获取用户信息,生成 Token 后手动设置认证用户即可:

public function login(Request $request) {

    $user = User::where('email', $request->email)->firstOrFail();

    if (Hash::check($request->password, $user->password)) {
        $loginToken = $user->createToken('MyApp')->accessToken;
        // 手动挂载用户实例到当前请求的Auth门面
        Auth::setUser($user);
        dd(Auth::check()); // 此处将返回true
        return response()->json([
            'message' => 'Successfully logged in',
            'loginToken' => $loginToken
        ]);
    }

    return $this->sendError('Unauthorized.', ['error' => 'Unauthorized']);
}

2. 后续接口请求正常识别登录状态

前端需要将登录接口返回的 loginToken 持久化存储,后续所有请求都要在请求头中携带该令牌,才能让 auth:api 中间件正常识别用户身份:

const handleSubmitLogin = (e) => {
    e.preventDefault();
    let dataLogin = {
        'email': email,
        'password': password,
    };

    // 原代码中这行没有赋值,属于无效代码可以直接删除
    // JSON.stringify(dataLogin);

    axios.post('http://site.test/api/login', dataLogin)
        .then(resp => {
            console.log(resp);
            // 存储token到本地
            localStorage.setItem('auth_token', resp.data.loginToken);
            // 给axios全局设置认证头,后续请求自动携带
            axios.defaults.headers.common['Authorization'] = 'Bearer ' + resp.data.loginToken;
            history.push('/gallery');
        }).catch(error => {
        console.log(error);
    });

    setUserState('myState');

};

补充说明

你提供的 auth.php、api.php 配置本身没有问题,不需要修改。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 04:24:02