gpt4 book ai didi

php - 不能使用 Illuminate\Contracts\Auth\Authenticatable - 这不是一个特征

转载 作者:行者123 更新时间:2023-12-05 07:10:27 24 4
gpt4 key购买 nike

我尝试使用 jwtToken 测试我的应用程序的登录和注销。我迷失了 Laravel Contract 和 Trait。我阅读了很多问题/答案,但解决方案无法对我的代码起作用。我知道契约(Contract)不像 trait 那样工作,但它似乎有很大的联系。三天以来,我一直在寻找出路,但没有成功。

自从我将 ActingAs 放入测试后,我就遇到了这个错误。

你能帮帮我吗?

我的用户模型:


namespace App\Models;

use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Auth\UserInterface;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Notifications\Notifiable;
use Tymon\JWTAuth\Contracts\JWTSubject;
use Illuminate\Database\Eloquent\SoftDeletes;
use App\Models\Role;
use App\Models\UserAddress;


class User extends Authenticatable implements
JWTSubject,
AuthenticatableContract
{
use Notifiable;
use SoftDeletes;
use Authenticatable;

我也尝试不使用 implements AuthenticatableContract我也试过没有第一次使用,没有第二次使用。

我的测试用例:


namespace Tests;

use App\Models\Role;
use App\Models\User;
use Illuminate\Support\Facades\DB;
use Illuminate\Foundation\Testing\TestCase as BaseTestCase;


abstract class TestCase extends BaseTestCase
{
use CreatesApplication;

/**
* @var User
*/
protected $user;

public static $admin;

public static $faker;

public function setUp(): void
{
parent::setUp();

self::$faker = \Faker\Factory::create('fr_FR');


self::$admin = \App\Models\User::with('role')
->select('*')
->join('roles', 'roles.id_role', '=', 'users.id_role')
->where('slug', 'admin')
->first()->user;

我的账户测试:


namespace Tests\Feature;

use Carbon\Carbon;
use Tests\TestCase;
use App\Models\Role;
use App\Models\User;
use Tymon\JWTAuth\JWTAuth;
use Illuminate\Auth\AuthenticationException;

use Illuminate\Contracts\Auth\Authenticatable;

[...]
public function testLogout() {

// $user = User::inRandomOrder()->firstOrFail();
// \Log::debug('user->first_name : ' . $user->first_name);

$this->actingAs(self::$admin)
->json('POST', 'api/auth/logout')
->assertStatus(200);
}```

最佳答案

这是不正确的:

class User extends Authenticatable implements 
JWTSubject,
AuthenticatableContract
{
use Notifiable;
use SoftDeletes;
use Authenticatable;
}

您不能扩展 Authenticatable使用 Authenticatable

Authenticatable 不是特征(如错误所述)。它是一个抽象类,只能被扩展。

您可以在这里阅读更多关于特征和抽象类之间的区别:Difference between Trait and an Abstract Class in PHP

删除 use 语句应该可以解决您的问题。

关于php - 不能使用 Illuminate\Contracts\Auth\Authenticatable - 这不是一个特征,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61234150/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com