@europeana/portal
Version:
Europeana Portal
35 lines (30 loc) • 1.17 kB
JavaScript
import Middleware from '../middleware'
import { routeOption, getMatchedComponents, normalizePath } from './utilities'
Middleware.auth = function (ctx) {
// Disable middleware if options: { auth: false } is set on the route
if (routeOption(ctx.route, 'auth', false)) {
return
}
// Disable middleware if no route was matched to allow 404/error page
const matches = []
const Components = getMatchedComponents(ctx.route, matches)
if (!Components.length) {
return
}
const { login, callback } = ctx.$auth.options.redirect
const pageIsInGuestMode = routeOption(ctx.route, 'auth', 'guest')
const insidePage = page => normalizePath(ctx.route.path) === normalizePath(page)
if (ctx.$auth.$state.loggedIn) {
// -- Authorized --
if (!login || insidePage(login) || pageIsInGuestMode) {
ctx.$auth.redirect('home')
}
} else {
// -- Guest --
// (Those passing `callback` at runtime need to mark their callback component
// with `auth: false` to avoid an unnecessary redirect from callback to login)
if (!pageIsInGuestMode && (!callback || !insidePage(callback))) {
ctx.$auth.redirect('login')
}
}
}