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

Laravel Passport Guard不支持attempt方法进行身份验证的问题

问题解决:TokenGuard::attempt 方法不存在

原因分析

你配置的api-partner守卫使用的是Laravel Passport的TokenGuard,这个守卫的设计目的是验证已存在的API令牌,而非处理账号密码的登录验证。attempt()方法是针对Session认证的SessionGuard(比如默认的web守卫)才有的方法,因此直接调用会触发方法不存在的异常。

正确实现步骤

要实现账号密码验证并生成API令牌,需要分两步:验证账号密码有效性、生成Passport令牌。

  1. 验证账号密码并生成令牌
    直接通过用户模型查询并校验密码,无需使用guard()->attempt():
use App\Models\Partner;
use Illuminate\Support\Facades\Hash;

// 获取请求参数
$email = $request->email;
$password = $request->password;

// 查询用户
$partner = Partner::where('email', $email)->first();

// 校验密码并生成令牌
if ($partner && Hash::check($password, $partner->password)) {
    $token = $partner->createToken('api-partner-auth-token')->accessToken;
    
    return response()->json([
        'message' => '登录成功',
        'token' => $token
    ], 200);
} else {
    return response()->json([
        'error' => '邮箱或密码错误'
    ], 401);
}
  1. 确保模型与守卫配置正确
  • 你的用户模型(比如Partner)必须引入Passport的HasApiTokens trait:
namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
use Laravel\Passport\HasApiTokens;

class Partner extends Authenticatable
{
    use HasApiTokens, HasFactory, Notifiable;

    // ... 模型其他配置
}
  • 确认config/auth.php中的守卫配置正确关联到对应的用户提供者:
'guards' => [
    // ... 其他守卫
    'api-partner' => [
        'driver' => 'passport',
        'provider' => 'partners',
    ],
],

'providers' => [
    // ... 其他提供者
    'partners' => [
        'driver' => 'eloquent',
        'model' => App\Models\Partner::class,
    ],
],

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 18:22:12