inertiajs-adonisjs
inertiajs-adonisjs copied to clipboard
Logout is not redirecting to Login page
Hello. After try to logout, the view is not changing / redirecting to Login page. When I refresh the page manually its redirected to Login, so the session was killed sucessfully by logout request from LoginController. Any idea?
Login Controller:
@inject()
export default class LoginController {
/**
* Create
*
* @param {HttpContext} { inertia }
* @return {*} {(Promise<string | PageObject<{}>>)}
* @memberof LoginController
*/
public async create({ inertia }: HttpContext): Promise<string | PageObject<{}>> {
return inertia.render('auth/login');
}
/**
* Store
*
* @param {HttpContext} { auth, request, response }
* @return {*} {Promise<void>}
* @memberof LoginController
*/
public async store({ auth, request, response }: HttpContext): Promise<void> {
const { email, password } = await request.validateUsing(LoginValidator);
// Verify credentials
const user = await User.verifyCredentials(email, password);
// Login user
await auth.use('web').login(user);
// Redirect to home
return response.redirect().toRoute('dashboard.index');
}
/**
* Destroy
*
* @param {HttpContext} { auth, response }
* @return {*} {Promise<void>}
* @memberof LoginController
*/
public async destroy({ auth, response }: HttpContext): Promise<void> {
// Logout user
await auth.use('web').logout();
// Redirect to login page
return response.redirect().toRoute('login.create');
}
}
Routes:
import { middleware } from '#start/kernel';
import router from '@adonisjs/core/services/router';
const LoginController = () => import('#controllers/auth/login');
const DashboardController = () => import('#controllers/home/dashboard');
router
.group(() => {
router.get('/login', [LoginController, 'create']).as('login.create');
router.post('/login', [LoginController, 'store']).as('login.store');
})
.prefix('/auth');
router
.group(() => {
router.get('/', [DashboardController, 'index']).as('dashboard.index');
router.delete('/auth/logout', [LoginController, 'destroy']).as('login.destroy');
})
.use(middleware.auth());
Frontend:
export default function Dashboard() {
const { t } = useTranslation();
function logout(): void {
router.delete('/auth/logout', {
onError: (error) => toast.error(error.message ?? t('errorOccurred')),
});
}
return (
<DefaultLayout loadDependency={true}>
<Head title="Homepage" />
<p>Hola Samuel!</p>
<form onSubmit={logout}>
<Button>Logout</Button>
</form>
</DefaultLayout>
);
}