update keycloak signup / login
This commit is contained in:
@@ -1,19 +1,62 @@
|
||||
import { redirect } from 'next/navigation';
|
||||
import type { NextRequest } from 'next/server';
|
||||
|
||||
import { createAuthCallbackService } from '@kit/supabase/auth';
|
||||
import { createAuthCallbackService, getErrorURLParameters } from '@kit/supabase/auth';
|
||||
import { getSupabaseServerClient } from '@kit/supabase/server-client';
|
||||
|
||||
import { pathsConfig } from '@kit/shared/config';
|
||||
import { createAccountsApi } from '@/packages/features/accounts/src/server/api';
|
||||
|
||||
const ERROR_PATH = '/auth/callback/error';
|
||||
|
||||
const redirectOnError = (searchParams?: string) => {
|
||||
return redirect(`${ERROR_PATH}${searchParams ? `?${searchParams}` : ''}`);
|
||||
}
|
||||
|
||||
export async function GET(request: NextRequest) {
|
||||
const { searchParams } = new URL(request.url);
|
||||
|
||||
const error = searchParams.get('error');
|
||||
if (error) {
|
||||
const { searchParams } = getErrorURLParameters({ error });
|
||||
return redirectOnError(searchParams);
|
||||
}
|
||||
|
||||
const authCode = searchParams.get('code');
|
||||
if (!authCode) {
|
||||
return redirectOnError();
|
||||
}
|
||||
|
||||
let redirectPath = searchParams.get('next') || pathsConfig.app.home;
|
||||
// if we have an invite token, we redirect to the join team page
|
||||
// instead of the default next url. This is because the user is trying
|
||||
// to join a team and we want to make sure they are redirected to the
|
||||
// correct page.
|
||||
const inviteToken = searchParams.get('invite_token');
|
||||
if (inviteToken) {
|
||||
const urlParams = new URLSearchParams({
|
||||
invite_token: inviteToken,
|
||||
email: searchParams.get('email') ?? '',
|
||||
});
|
||||
|
||||
redirectPath = `${pathsConfig.app.joinTeam}?${urlParams.toString()}`;
|
||||
}
|
||||
|
||||
const service = createAuthCallbackService(getSupabaseServerClient());
|
||||
const oauthResult = await service.exchangeCodeForSession(authCode);
|
||||
if (!("isSuccess" in oauthResult)) {
|
||||
return redirectOnError(oauthResult.searchParams);
|
||||
}
|
||||
|
||||
const { nextPath } = await service.exchangeCodeForSession(request, {
|
||||
joinTeamPath: pathsConfig.app.joinTeam,
|
||||
redirectPath: pathsConfig.app.home,
|
||||
});
|
||||
const api = createAccountsApi(getSupabaseServerClient());
|
||||
|
||||
return redirect(nextPath);
|
||||
const account = await api.getPersonalAccountByUserId(
|
||||
oauthResult.user.id,
|
||||
);
|
||||
|
||||
if (!account.email || !account.name || !account.last_name) {
|
||||
return redirect(pathsConfig.auth.updateAccount);
|
||||
}
|
||||
|
||||
return redirect(redirectPath);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user