Problem bei der Verwendung von Passport::actingAs für TestsPhp

PHP-Programmierer chatten hier
Anonymous
 Problem bei der Verwendung von Passport::actingAs für Tests

Post by Anonymous »

mit Postman:
  • Ich kann auf die Route zugreifen, indem ich ein Client-Grant von einem Token aus erhalte, das in
    /oauth/token erhalten wurde
  • Ich kann auch auf die Route zugreifen, indem ich ein Token vom Anmeldebenutzer verwende (persönlicher Zugriffsclient)
Ich stoße jedoch auf Probleme, wenn ich Tests schreibe Wenn ich simuliere, Zugriff
von oauth/token zu erhalten, mich dann anzumelden, um das Zugriffstoken für den Benutzer zu erhalten, und dieses Benutzertoken auf dieser bestimmten Route verwende, habe ich keine Probleme
(test_get_products_using_authenticated_user)
Aber wenn ich Passport::actingAs verwende, erhalte ich eine Fehlermeldung
(test_get_products_using_authenticated_user2)
hier ist das Code-Snippet

Code: Select all

    public function test_get_products_using_authenticated_user(): void
{
$data = [
'email' => CustomerSeeder::CUSTOMER_EXAMPLE_EMAIL,
'password' => CustomerSeeder::CUSTOMER_EXAMPLE_PASSWORD,
];
$loginResponse = $this->withHeaders([
'Authorization' => 'Bearer ' . $this->generateAccessToken(),
])->postJson('/api/login', $data);

$loginResponse->assertStatus(200);
$loginToken = $loginResponse->json('data.token');

$response = $this->withHeaders([
'Authorization' => 'Bearer ' . $loginToken,
])->getJson('/api/products');
$response = $this->get('/api/products');
$response->assertStatus(200);
}

public function test_products_using_authenticated_user2(): void
{
$user = User::where('email', CustomerSeeder::CUSTOMER_EXAMPLE_EMAIL)->first();
Passport::actingAs(
$user,
[],
'api'
);

$response = $this->get('/api/products');
$response->assertStatus(200);
}
Ich bekomme für den zweiten Test

Code: Select all

Route [login] not defined.

at tests\Feature\api\ProductTest.php:58
54▕             'api'
55▕         );
56▕
57▕         $response = $this->get('/api/products');
➜  58▕         $response->assertStatus(200);
59▕     }
60▕ }
61▕
Produktroute

Code: Select all

    Route::group(['prefix' => 'products', 'middleware' => 'client'], function () {
Route::get('/', [ProductController::class, 'index'])-      >name('product.list');
});
http/kernel.php

Code: Select all

    protected $middlewareAliases = [
'auth' => \App\Http\Middleware\Authenticate::class,
'client' => CheckClientCredentials::class,
config/auth.php

Code: Select all

    'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
'api' => [
'driver' => 'passport',
'provider' => 'users',
],
],

'providers' => [
'users' => [
'driver' => 'eloquent',
'model' => App\Models\User::class,
],

// 'users' => [
//     'driver' => 'database',
//     'table' => 'users',
// ],
],
Wenn ich meine Produktroute von Middleware auf „auth:api“ ändere, scheinen die Tests in Ordnung zu sein, aber das ist nicht das, was ich möchte, da ich auch möchte, dass der Client Zugriff auf diese Route gewährt.
Was fehlt mir hier?
Ich verwende Laravel 10.10, Passport 12 und PHP 8.1

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post