32 lines
833 B
TypeScript
32 lines
833 B
TypeScript
import type { HttpContext } from '@adonisjs/core/http'
|
|
import type { NextFn } from '@adonisjs/core/types/http'
|
|
import type { Authenticators } from '@adonisjs/auth/types'
|
|
|
|
/**
|
|
* Guest middleware is used to deny access to routes that should
|
|
* be accessed by unauthenticated users.
|
|
*
|
|
* For example, the login page should not be accessible if the user
|
|
* is already logged-in
|
|
*/
|
|
export default class GuestMiddleware {
|
|
/**
|
|
* The URL to redirect to when user is logged-in
|
|
*/
|
|
redirectTo = '/'
|
|
|
|
async handle(
|
|
ctx: HttpContext,
|
|
next: NextFn,
|
|
options: { guards?: (keyof Authenticators)[] } = {}
|
|
) {
|
|
for (let guard of options.guards || [ctx.auth.defaultGuard]) {
|
|
if (await ctx.auth.use(guard).check()) {
|
|
return ctx.response.redirect(this.redirectTo, true)
|
|
}
|
|
}
|
|
|
|
return next()
|
|
}
|
|
}
|