expressjs -> nextjs
This commit is contained in:
40
nextjs/proxy.js
Normal file
40
nextjs/proxy.js
Normal file
@@ -0,0 +1,40 @@
|
||||
import { NextResponse } from 'next/server';
|
||||
|
||||
const csrfCookieName = 'csrf';
|
||||
const cookieSecure = process.env.COOKIE_SECURE === 'true';
|
||||
|
||||
function createToken() {
|
||||
const bytes = new Uint8Array(32);
|
||||
crypto.getRandomValues(bytes);
|
||||
return Array.from(bytes, (byte) => byte.toString(16).padStart(2, '0')).join('');
|
||||
}
|
||||
|
||||
export function proxy(request) {
|
||||
const token = request.cookies.get(csrfCookieName)?.value;
|
||||
if (token) {
|
||||
return NextResponse.next();
|
||||
}
|
||||
|
||||
const nextToken = createToken();
|
||||
const requestHeaders = new Headers(request.headers);
|
||||
requestHeaders.set('x-csrf-token', nextToken);
|
||||
|
||||
const response = NextResponse.next({
|
||||
request: {
|
||||
headers: requestHeaders,
|
||||
},
|
||||
});
|
||||
|
||||
response.cookies.set(csrfCookieName, nextToken, {
|
||||
httpOnly: true,
|
||||
sameSite: 'strict',
|
||||
secure: cookieSecure,
|
||||
path: '/',
|
||||
});
|
||||
|
||||
return response;
|
||||
}
|
||||
|
||||
export const config = {
|
||||
matcher: ['/manage/:path*'],
|
||||
};
|
||||
Reference in New Issue
Block a user