Atualizar src/app/api/auth/callback/route.ts
This commit is contained in:
parent
348723f39f
commit
568fb16a89
1 changed files with 38 additions and 9 deletions
|
|
@ -12,26 +12,45 @@ export async function GET(request: NextRequest) {
|
||||||
const error = request.nextUrl.searchParams.get('error');
|
const error = request.nextUrl.searchParams.get('error');
|
||||||
|
|
||||||
if (error || !code) {
|
if (error || !code) {
|
||||||
const errorDesc = request.nextUrl.searchParams.get('error_description') || 'Login cancelled';
|
const errorDesc =
|
||||||
|
request.nextUrl.searchParams.get('error_description') || 'Login cancelled';
|
||||||
|
|
||||||
return NextResponse.redirect(
|
return NextResponse.redirect(
|
||||||
new URL(`/login?error=${encodeURIComponent(errorDesc)}`, request.url)
|
new URL(`/login?error=${encodeURIComponent(errorDesc)}`, request.url)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
const settings = getSettings();
|
const settings = getSettings();
|
||||||
const appId = settings.metaAppId || process.env.META_APP_ID;
|
|
||||||
const appSecret = settings.metaAppSecret || process.env.META_APP_SECRET;
|
const appId =
|
||||||
const redirectUri = process.env.META_REDIRECT_URI || 'http://localhost:3000/api/auth/callback';
|
settings.metaAppId ||
|
||||||
|
process.env.META_APP_ID;
|
||||||
|
|
||||||
|
const appSecret =
|
||||||
|
settings.metaAppSecret ||
|
||||||
|
process.env.META_APP_SECRET;
|
||||||
|
|
||||||
|
const redirectUri =
|
||||||
|
process.env.META_REDIRECT_URI ||
|
||||||
|
'https://admanager.seureview.com.br/api/auth/callback';
|
||||||
|
|
||||||
if (!appId || !appSecret) {
|
if (!appId || !appSecret) {
|
||||||
return NextResponse.redirect(
|
return NextResponse.redirect(
|
||||||
new URL(`/login?error=${encodeURIComponent('Credenciais Meta não configuradas no sistema.')}`, request.url)
|
new URL(
|
||||||
|
`/login?error=${encodeURIComponent(
|
||||||
|
'Credenciais Meta não configuradas no sistema.'
|
||||||
|
)}`,
|
||||||
|
request.url
|
||||||
|
)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
// 1. Exchange code for short-lived token
|
// 1. Exchange code for short-lived token
|
||||||
const tokenUrl = new URL('https://graph.facebook.com/v20.0/oauth/access_token');
|
const tokenUrl = new URL(
|
||||||
|
'https://graph.facebook.com/v20.0/oauth/access_token'
|
||||||
|
);
|
||||||
|
|
||||||
tokenUrl.searchParams.set('client_id', appId);
|
tokenUrl.searchParams.set('client_id', appId);
|
||||||
tokenUrl.searchParams.set('client_secret', appSecret);
|
tokenUrl.searchParams.set('client_secret', appSecret);
|
||||||
tokenUrl.searchParams.set('redirect_uri', redirectUri);
|
tokenUrl.searchParams.set('redirect_uri', redirectUri);
|
||||||
|
|
@ -47,7 +66,10 @@ export async function GET(request: NextRequest) {
|
||||||
const shortToken = tokenData.access_token;
|
const shortToken = tokenData.access_token;
|
||||||
|
|
||||||
// 2. Exchange for long-lived token (60 days)
|
// 2. Exchange for long-lived token (60 days)
|
||||||
const longTokenUrl = new URL('https://graph.facebook.com/v20.0/oauth/access_token');
|
const longTokenUrl = new URL(
|
||||||
|
'https://graph.facebook.com/v20.0/oauth/access_token'
|
||||||
|
);
|
||||||
|
|
||||||
longTokenUrl.searchParams.set('grant_type', 'fb_exchange_token');
|
longTokenUrl.searchParams.set('grant_type', 'fb_exchange_token');
|
||||||
longTokenUrl.searchParams.set('client_id', appId);
|
longTokenUrl.searchParams.set('client_id', appId);
|
||||||
longTokenUrl.searchParams.set('client_secret', appSecret);
|
longTokenUrl.searchParams.set('client_secret', appSecret);
|
||||||
|
|
@ -55,16 +77,19 @@ export async function GET(request: NextRequest) {
|
||||||
|
|
||||||
const longRes = await fetch(longTokenUrl.toString());
|
const longRes = await fetch(longTokenUrl.toString());
|
||||||
const longData = await longRes.json();
|
const longData = await longRes.json();
|
||||||
|
|
||||||
const accessToken = longData.access_token || shortToken;
|
const accessToken = longData.access_token || shortToken;
|
||||||
|
|
||||||
// 3. Get user info
|
// 3. Get user info
|
||||||
const meRes = await fetch(
|
const meRes = await fetch(
|
||||||
`https://graph.facebook.com/v20.0/me?fields=name,picture.type(large)&access_token=${accessToken}`
|
`https://graph.facebook.com/v20.0/me?fields=name,picture.type(large)&access_token=${accessToken}`
|
||||||
);
|
);
|
||||||
|
|
||||||
const meData = await meRes.json();
|
const meData = await meRes.json();
|
||||||
|
|
||||||
// 4. Save session
|
// 4. Save session
|
||||||
const cookieStore = await cookies();
|
const cookieStore = await cookies();
|
||||||
|
|
||||||
setSessionCookies(cookieStore, accessToken, {
|
setSessionCookies(cookieStore, accessToken, {
|
||||||
name: meData.name || 'User',
|
name: meData.name || 'User',
|
||||||
picture: meData.picture?.data?.url || '',
|
picture: meData.picture?.data?.url || '',
|
||||||
|
|
@ -74,8 +99,12 @@ export async function GET(request: NextRequest) {
|
||||||
return NextResponse.redirect(new URL('/dashboard', request.url));
|
return NextResponse.redirect(new URL('/dashboard', request.url));
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.error('[Auth] OAuth error:', err);
|
console.error('[Auth] OAuth error:', err);
|
||||||
|
|
||||||
return NextResponse.redirect(
|
return NextResponse.redirect(
|
||||||
new URL(`/login?error=${encodeURIComponent('Erro na autenticação')}`, request.url)
|
new URL(
|
||||||
|
`/login?error=${encodeURIComponent('Erro na autenticação')}`,
|
||||||
|
request.url
|
||||||
|
)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Loading…
Reference in a new issue