implemented sign-in policy
This commit is contained in:
@@ -3,11 +3,12 @@
|
||||
* @description hooks-up `next-auth` into the page processing pipeline
|
||||
*/
|
||||
|
||||
import { auth } from '@/app/lib/auth'
|
||||
import { auth, authConfig } from '@/app/lib/auth'
|
||||
import createIntlMiddleware from 'next-intl/middleware';
|
||||
import { NextRequest, NextResponse } from 'next/server';
|
||||
import { locales } from '@/app/i18n';
|
||||
|
||||
const locales = ['en', 'de'];
|
||||
const publicPages = ['/', '/login'];
|
||||
const publicPages = ['/terms', '/policy', '/login'];
|
||||
|
||||
const intlMiddleware = createIntlMiddleware({
|
||||
locales,
|
||||
@@ -15,15 +16,31 @@ const intlMiddleware = createIntlMiddleware({
|
||||
defaultLocale: 'hr'
|
||||
});
|
||||
|
||||
export const config = {
|
||||
// midleware will NOT be called for paths: '/api/auth/*', '/_next/static/*', '/_next/image*', static files and public pages
|
||||
matcher: [
|
||||
'/((?!api|_next/static|_next/image|.*\\.png$|.*\\.webm$|en/policy|hr/policy|en/terms|hr/terms|en/login|hr/login).*)',
|
||||
],
|
||||
};
|
||||
export default async function middleware(req: NextRequest) {
|
||||
const publicPathnameRegex = RegExp(
|
||||
`^(/(${locales.join('|')}))?(${publicPages
|
||||
.flatMap((p) => (p === '/' ? ['', '/'] : p))
|
||||
.join('|')})/?$`,
|
||||
'i'
|
||||
);
|
||||
const isPublicPage = publicPathnameRegex.test(req.nextUrl.pathname);
|
||||
|
||||
// middleware will call NextAuth's `auth` method, which will in turn call) see `auth.ts`
|
||||
export default auth((req) => {
|
||||
// call the internalization middleware
|
||||
return(intlMiddleware(req));
|
||||
});
|
||||
// for punlic pages we call only localisation middleware
|
||||
if (!isPublicPage) {
|
||||
const session = await auth();
|
||||
|
||||
if (!session) {
|
||||
const signInUrl = `${req.nextUrl.protocol}//${req.nextUrl.hostname}${req.nextUrl.port ? `:${req.nextUrl.port}` : ''}${authConfig.pages?.signIn as string}`;
|
||||
return NextResponse.redirect( signInUrl );
|
||||
}
|
||||
}
|
||||
|
||||
return intlMiddleware(req);
|
||||
}
|
||||
|
||||
export const config = {
|
||||
// for these paths middleware will not be called
|
||||
matcher: [
|
||||
'/((?!api|_next/static|_next/image|.*\\.png$|.*\\.webm$).*)',
|
||||
],
|
||||
};
|
||||
Reference in New Issue
Block a user