feat: Pass user role and agent type via cookies for social sign-up and include them in the social authentication API request.
This commit is contained in:
@@ -94,6 +94,16 @@ export default function SignUpPage() {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const handleSocialLogin = (provider: 'google' | 'facebook' | 'twitter') => {
|
const handleSocialLogin = (provider: 'google' | 'facebook' | 'twitter') => {
|
||||||
|
// If agent, require agent type selection
|
||||||
|
if (userType === 'AGENT' && !selectedAgentTypeId) {
|
||||||
|
setError('Please select an agent type before signing up');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// Set cookies with selected role and agent type so server-side auth callback can read them
|
||||||
|
document.cookie = `socialAuthRole=${userType};path=/;max-age=300;SameSite=Lax`;
|
||||||
|
if (userType === 'AGENT' && selectedAgentTypeId) {
|
||||||
|
document.cookie = `socialAuthAgentTypeId=${selectedAgentTypeId};path=/;max-age=300;SameSite=Lax`;
|
||||||
|
}
|
||||||
signIn(provider, { callbackUrl: '/' });
|
signIn(provider, { callbackUrl: '/' });
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -317,14 +327,6 @@ export default function SignUpPage() {
|
|||||||
|
|
||||||
{/* Social Login Icons */}
|
{/* Social Login Icons */}
|
||||||
<div className="flex justify-center items-center gap-8">
|
<div className="flex justify-center items-center gap-8">
|
||||||
{/* Apple */}
|
|
||||||
<button
|
|
||||||
type="button"
|
|
||||||
className="w-10 h-10 flex items-center justify-center hover:opacity-70 transition-opacity"
|
|
||||||
>
|
|
||||||
<img src="/assets/icons/apple.svg" alt="Apple" className="w-6 h-6" />
|
|
||||||
</button>
|
|
||||||
|
|
||||||
{/* Google */}
|
{/* Google */}
|
||||||
<button
|
<button
|
||||||
type="button"
|
type="button"
|
||||||
|
|||||||
14
src/auth.ts
14
src/auth.ts
@@ -114,6 +114,18 @@ export const { handlers, signIn, signOut, auth } = NextAuth({
|
|||||||
// For OAuth providers, sync with backend
|
// For OAuth providers, sync with backend
|
||||||
if (account?.provider === "google" || account?.provider === "facebook" || account?.provider === "twitter") {
|
if (account?.provider === "google" || account?.provider === "facebook" || account?.provider === "twitter") {
|
||||||
try {
|
try {
|
||||||
|
// Read role and agent type from cookies (set by signup page before OAuth redirect)
|
||||||
|
let role: string | undefined;
|
||||||
|
let agentTypeId: string | undefined;
|
||||||
|
try {
|
||||||
|
const { cookies } = await import("next/headers");
|
||||||
|
const cookieStore = await cookies();
|
||||||
|
role = cookieStore.get("socialAuthRole")?.value;
|
||||||
|
agentTypeId = cookieStore.get("socialAuthAgentTypeId")?.value;
|
||||||
|
} catch {
|
||||||
|
// Cookie may not be available
|
||||||
|
}
|
||||||
|
|
||||||
const res = await fetch(
|
const res = await fetch(
|
||||||
`${process.env.NEXT_PUBLIC_API_URL}/auth/social`,
|
`${process.env.NEXT_PUBLIC_API_URL}/auth/social`,
|
||||||
{
|
{
|
||||||
@@ -125,6 +137,8 @@ export const { handlers, signIn, signOut, auth } = NextAuth({
|
|||||||
email: user.email,
|
email: user.email,
|
||||||
name: user.name,
|
name: user.name,
|
||||||
avatar: user.image,
|
avatar: user.image,
|
||||||
|
role,
|
||||||
|
agentTypeId,
|
||||||
}),
|
}),
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|||||||
Reference in New Issue
Block a user