You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
70 lines
1.8 KiB
TypeScript
70 lines
1.8 KiB
TypeScript
import { clerkMiddleware, createRouteMatcher } from '@clerk/nextjs/server';
|
|
import { NextResponse } from 'next/server';
|
|
|
|
import { authEnv } from '@/config/auth';
|
|
import NextAuthEdge from '@/libs/next-auth/edge';
|
|
|
|
import { OAUTH_AUTHORIZED } from './const/auth';
|
|
|
|
export const config = {
|
|
matcher: [
|
|
// include any files in the api or trpc folders that might have an extension
|
|
'/(api|trpc)(.*)',
|
|
// include the /
|
|
'/',
|
|
'/chat(.*)',
|
|
'/settings(.*)',
|
|
'/files(.*)',
|
|
'/repos(.*)',
|
|
// ↓ cloud ↓
|
|
],
|
|
};
|
|
|
|
const defaultMiddleware = () => NextResponse.next();
|
|
|
|
// Initialize an Edge compatible NextAuth middleware
|
|
const nextAuthMiddleware = NextAuthEdge.auth((req) => {
|
|
// skip the '/' route
|
|
if (req.nextUrl.pathname === '/') return NextResponse.next();
|
|
|
|
// Just check if session exists
|
|
const session = req.auth;
|
|
|
|
// Check if next-auth throws errors
|
|
// refs: https://github.com/lobehub/lobe-chat/pull/1323
|
|
const isLoggedIn = !!session?.expires;
|
|
|
|
// Remove & amend OAuth authorized header
|
|
const requestHeaders = new Headers(req.headers);
|
|
requestHeaders.delete(OAUTH_AUTHORIZED);
|
|
if (isLoggedIn) requestHeaders.set(OAUTH_AUTHORIZED, 'true');
|
|
|
|
return NextResponse.next({
|
|
request: {
|
|
headers: requestHeaders,
|
|
},
|
|
});
|
|
});
|
|
|
|
const isProtectedRoute = createRouteMatcher([
|
|
'/settings(.*)',
|
|
'/files(.*)',
|
|
// ↓ cloud ↓
|
|
]);
|
|
|
|
export default authEnv.NEXT_PUBLIC_ENABLE_CLERK_AUTH
|
|
? clerkMiddleware(
|
|
(auth, req) => {
|
|
if (isProtectedRoute(req)) auth().protect();
|
|
},
|
|
{
|
|
// https://github.com/lobehub/lobe-chat/pull/3084
|
|
clockSkewInMs: 60 * 60 * 1000,
|
|
signInUrl: '/login',
|
|
signUpUrl: '/signup',
|
|
},
|
|
)
|
|
: authEnv.NEXT_PUBLIC_ENABLE_NEXT_AUTH
|
|
? nextAuthMiddleware
|
|
: defaultMiddleware;
|