inertiajs-adonisjs icon indicating copy to clipboard operation
inertiajs-adonisjs copied to clipboard

Logout is not redirecting to Login page

Open samyan opened this issue 7 months ago • 0 comments

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>
    );
}

samyan avatar May 02 '25 10:05 samyan