参考)https://teratail.com/questions/235251
結論からいうと、
$this->refreshApplication()
使いました。参考サイトに記載されている通り、flushHeaders()
等行って、withHeaders
で、異なるtokenをセットしても、最初にリクエストを投げたユーザーで認証が通ってしまって意図した動作になりません。
一度、refreshApplication
をして、完全に初期化してしまうと、別のユーザーで認証されました。
// sample
$user = User::find(1);
$token = $user->createToken()->accessToken;
$header = [
'Accept' => 'application/json',
'Content-Type' => 'application/json',
'Authorization' => 'Bearer ' . $token,
];
$user2 = User::find(2);
$token2 = $user->createToken()->accessToken;
$header2 = [
'Accept' => 'application/json',
'Content-Type' => 'application/json',
'Authorization' => 'Bearer ' . $token2,
];
// user 1 で処理される
$response = $this->withHeaders($header)
->json('GET', '<url>');
// user 2 で処理されない
// $this->flushHeaders(); // これも意味がない
// $this->withHeader('Authorization', 'Bearer ' . $token2); // これも意味がない
$response = $this->withHeaders($header2)
->json('GET', '<url>');
// refreshApplicationを行って、user2でアクセスするとうまくいく
$this->refreshApplication()
$response = $this->withHeaders($header2)
->json('GET', '<url>');