diff --git a/app/Http/Middleware/ApiAuthenticate.php b/app/Http/Middleware/ApiAuthenticate.php index 15962b3b0..728057bed 100644 --- a/app/Http/Middleware/ApiAuthenticate.php +++ b/app/Http/Middleware/ApiAuthenticate.php @@ -35,9 +35,9 @@ class ApiAuthenticate { // Return if the user is already found to be signed in via session-based auth. // This is to make it easy to browser the API via browser after just logging into the system. - if (signedInUser()) { + if (signedInUser() || session()->isStarted()) { $this->ensureEmailConfirmedIfRequested(); - if (!auth()->user()->can('access-api')) { + if (!user()->can('access-api')) { throw new ApiAuthException(trans('errors.api_user_no_api_permission'), 403); } return; diff --git a/tests/Api/ApiDocsTest.php b/tests/Api/ApiDocsTest.php index 3cbcadfa3..1687c64a1 100644 --- a/tests/Api/ApiDocsTest.php +++ b/tests/Api/ApiDocsTest.php @@ -1,5 +1,6 @@ setSettings(['app-public' => true]); + $guest = User::getDefault(); + + $this->startSession(); + $resp = $this->get('/api/docs'); + $resp->assertStatus(403); + + $this->giveUserPermissions($guest, ['access-api']); + + $resp = $this->get('/api/docs'); + $resp->assertStatus(200); + } } \ No newline at end of file