diff --git a/src/resources/js/app.js b/src/resources/js/app.js --- a/src/resources/js/app.js +++ b/src/resources/js/app.js @@ -143,6 +143,11 @@ if (!error.response) { // TODO: probably network connection error } else if (error.response.status === 401) { + // Remember requested route to come back to it after log in + if (this.$route.meta.requiresAuth) { + store.state.afterLogin = this.$route + } + this.logoutUser() } else { this.errorPage(error.response.status, error.response.statusText) diff --git a/src/tests/Browser/LogonTest.php b/src/tests/Browser/LogonTest.php --- a/src/tests/Browser/LogonTest.php +++ b/src/tests/Browser/LogonTest.php @@ -7,6 +7,7 @@ use Tests\Browser\Components\Toast; use Tests\Browser\Pages\Dashboard; use Tests\Browser\Pages\Home; +use Tests\Browser\Pages\UserProfile; use Tests\TestCaseDusk; use Illuminate\Foundation\Testing\DatabaseMigrations; @@ -37,7 +38,7 @@ /** * Test redirect to /login if user is unauthenticated */ - public function testLogonRedirect(): void + public function testRequiredAuth(): void { $this->browse(function (Browser $browser) { $browser->visit('/dashboard'); @@ -208,4 +209,24 @@ ->on(new Dashboard()); }); } + + /** + * Test redirect to the requested page after logon + * + * @depends test2FA + */ + public function testAfterLogonRedirect(): void + { + $this->browse(function (Browser $browser) { + // User is logged in + $browser->visit(new UserProfile()); + + // Test redirect if the token is invalid + $browser->script("localStorage.setItem('token', '123')"); + $browser->refresh() + ->on(new Home()) + ->submitLogon('john@kolab.org', 'simple123', false) + ->waitForLocation('/profile'); + }); + } }