You've already forked AstralRinth
forked from didirus/AstralRinth
Refactor auth middleware (#1279)
- Switch to TypeScript - Use early return - Switch to regular for loop Co-authored-by: Geometrically <18202329+Geometrically@users.noreply.github.com>
This commit is contained in:
@@ -1,35 +0,0 @@
|
||||
const whitelistedParams = ["flow", "error"];
|
||||
|
||||
export default defineNuxtRouteMiddleware(async (_to, from) => {
|
||||
const config = useRuntimeConfig();
|
||||
const auth = await useAuth();
|
||||
|
||||
if (!auth.value.user) {
|
||||
const fullPath = from.fullPath;
|
||||
|
||||
const url = new URL(fullPath, config.public.apiBaseUrl);
|
||||
|
||||
const extractedParams = whitelistedParams.reduce((acc, param) => {
|
||||
if (url.searchParams.has(param)) {
|
||||
acc[param] = url.searchParams.get(param);
|
||||
url.searchParams.delete(param);
|
||||
}
|
||||
return acc;
|
||||
}, {});
|
||||
|
||||
const redirectPath = encodeURIComponent(url.pathname + url.search);
|
||||
|
||||
return await navigateTo(
|
||||
{
|
||||
path: "/auth/sign-in",
|
||||
query: {
|
||||
redirect: redirectPath,
|
||||
...extractedParams,
|
||||
},
|
||||
},
|
||||
{
|
||||
replace: true,
|
||||
},
|
||||
);
|
||||
}
|
||||
});
|
||||
35
apps/frontend/src/middleware/auth.ts
Normal file
35
apps/frontend/src/middleware/auth.ts
Normal file
@@ -0,0 +1,35 @@
|
||||
const whitelistedParams = ["flow", "error"];
|
||||
|
||||
export default defineNuxtRouteMiddleware(async (_to, from) => {
|
||||
const config = useRuntimeConfig();
|
||||
const auth = await useAuth();
|
||||
|
||||
if (auth.value.user) return;
|
||||
|
||||
const fullPath = from.fullPath;
|
||||
|
||||
const url = new URL(fullPath, config.public.apiBaseUrl);
|
||||
|
||||
const extractedParams = Object.create(null) as Record<string, string>;
|
||||
|
||||
for (const param of whitelistedParams) {
|
||||
const val = url.searchParams.get(param);
|
||||
if (val != null) {
|
||||
extractedParams[param] = val;
|
||||
url.searchParams.delete(param);
|
||||
}
|
||||
}
|
||||
|
||||
const redirect = encodeURIComponent(url.pathname + url.search);
|
||||
|
||||
return await navigateTo(
|
||||
{
|
||||
path: "/auth/sign-in",
|
||||
query: {
|
||||
redirect,
|
||||
...extractedParams,
|
||||
},
|
||||
},
|
||||
{ replace: true },
|
||||
);
|
||||
});
|
||||
Reference in New Issue
Block a user