【问题标题】:Verify Token is Token Laravel Passport验证 Token 是 Token Laravel Passport
【发布时间】:2021-06-21 16:30:20
【问题描述】:

我最近从 laravel 的圣所更新到了护照;有一个测试让我很困扰。 在 sanctum 中 PersonalAccessToken 模型下有这个方法可以找到令牌并返回令牌(如果存在)。 我似乎在文档或在线上找不到类似的东西。 我通过断言 $user->tokens 不为空来验证测试......但我希望验证我从登录控制器返回的令牌确实是一个令牌;不仅仅是创造;

提前谢谢...

登录测试

public function user_can_login()
{
    //$this->withoutExceptionHandling();

    $user = User::factory()->create();
    $url = route('api.v1.auth.login', [
        'email' => $user->email,
        'password' => 'password'
    ]);
    $res = $this->jsonApi()
        ->post($url)
        ->assertStatus(200);

    $token = $res->json(['access_token']);

    $this->assertNotEmpty($user->tokens);
}

authcontroller 中的登录方法

public function login(Request $request)
{
    $request->validate([
        'email' => 'required|email',
        'password' => 'required',
    ]);

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

    if (Auth::attempt($credentials)) {
        $user = Auth::user();
        $access_token = $user->createToken('laravel-api.local')->accessToken;
        return response()->json(['access_token' => $access_token], 200);
    } else {
        return response()->json(['error' => 'Unauthorized'], 401);
    }
}

pues:不知道我为什么要写代码,只是为了参考我在做什么

【问题讨论】:

    标签: laravel phpunit token laravel-passport laravel-sanctum


    【解决方案1】:

    https://laracasts.com/discuss/channels/testing/how-do-i-create-a-route-while-testing

    解决方案非常简单......你会在这里找到它......我之前尝试过时遇到了一个问题,它似乎与使用 Route::name('name') 方法和route('name') 函数引发了服务器错误。但如果你直接调用路径,它应该可以工作......

    任何人... authController 和登录方法保持不变,但测试更改为...

    public function setUp(): void
    {
        parent::setUp();
    
        Route::middleware('auth:api')
            ->get('/test-route', function (Request $request) {
                return $request->user();
            });
    
        $clientRepository = new ClientRepository();
    
        $client = $clientRepository->createPersonalAccessClient(
            null,
            'Personal Access Client Test',
            '/'
        );
        DB::table('oauth_personal_access_clients')->insert([
            'client_id' => $client->id,
            'created_at' => date('Y-m-d'),
            'updated_at' => date('Y-m-d'),
        ]);
    }
    
    /** @test */
    public function user_can_login_with_correct_credentials()
    {
        //$this->withoutExceptionHandling();
    
        $user = User::factory()->create();
        $url = route('api.v1.auth.login', [
            'email' => $user->email,
            'password' => 'password',
            'device_name' => $user->name . ' test Device'
        ]);
        $res = $this->jsonApi()
            ->post($url)
            ->assertStatus(200);
    
        $token = $res->json(['access_token']);
    
        $this->jsonApi()
            ->withHeader('Authorization', 'Bearer ' . $token)
            ->get('/test-route')
            ->assertStatus(200);
    }
    

    【讨论】:

      猜你喜欢
      • 2018-10-09
      • 1970-01-01
      • 2021-08-15
      • 1970-01-01
      • 2023-03-03
      • 2020-09-17
      • 2019-07-27
      • 1970-01-01
      • 2018-11-18
      相关资源
      最近更新 更多