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

Laravel Passport TokenGuard无attempt方法报错及解决咨询

问题解答

Laravel Passport的TokenGuard不支持attempt方法

你遇到的错误根源在于:TokenGuard(Passport对应的API守卫类)没有attempt方法——这个方法是**会话守卫(SessionGuard)**专属的,作用是验证用户凭证并创建会话,但Passport的API认证是无状态的令牌机制,不需要维护会话,因此不会提供该方法。

解决方法

需要手动完成用户凭证验证,通过后再生成Passport令牌,具体实现如下:

  1. 从请求中提取邮箱和密码,通过对应用户模型查询目标用户
  2. 使用Hash::check验证密码是否匹配
  3. 验证通过后调用createToken生成Passport访问令牌

修改后的代码示例:

use Illuminate\Support\Facades\Hash;
use App\Models\CompanyUser; // 替换为你实际的公司用户模型

$credentials = $request->only(['email', 'password']);

// 根据邮箱查询用户
$user = CompanyUser::where('email', $credentials['email'])->first();

// 验证用户存在且密码匹配
if ($user && Hash::check($credentials['password'], $user->password)) {
    // 生成Passport访问令牌
    $token = $user->createToken('MyApp')->accessToken;
    
    // 后续逻辑:比如返回令牌给前端
    return response()->json(['access_token' => $token]);
} else {
    // 验证失败返回错误
    return response()->json(['message' => '邮箱或密码错误'], 401);
}

补充说明

你的config/auth.php配置是正确的,API守卫使用Passport驱动符合规范,但要明确两类守卫的差异:

  • 会话守卫(比如你的company守卫)用attempt处理登录并维持会话状态
  • API场景下的Passport认证无需依赖会话,只需手动验证凭证后生成令牌,前端后续请求携带令牌即可完成身份校验

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 02:01:00