Atualizar src/app/api/auth/callback/route.ts

This commit is contained in:
marciobever 2026-06-08 00:49:23 +00:00
parent 348723f39f
commit 568fb16a89

View file

@ -12,26 +12,45 @@ export async function GET(request: NextRequest) {
const error = request.nextUrl.searchParams.get('error');
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(
new URL(`/login?error=${encodeURIComponent(errorDesc)}`, request.url)
);
}
const settings = getSettings();
const appId = settings.metaAppId || process.env.META_APP_ID;
const appSecret = settings.metaAppSecret || process.env.META_APP_SECRET;
const redirectUri = process.env.META_REDIRECT_URI || 'http://localhost:3000/api/auth/callback';
const appId =
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) {
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 {
// 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_secret', appSecret);
tokenUrl.searchParams.set('redirect_uri', redirectUri);
@ -47,7 +66,10 @@ export async function GET(request: NextRequest) {
const shortToken = tokenData.access_token;
// 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('client_id', appId);
longTokenUrl.searchParams.set('client_secret', appSecret);
@ -55,16 +77,19 @@ export async function GET(request: NextRequest) {
const longRes = await fetch(longTokenUrl.toString());
const longData = await longRes.json();
const accessToken = longData.access_token || shortToken;
// 3. Get user info
const meRes = await fetch(
`https://graph.facebook.com/v20.0/me?fields=name,picture.type(large)&access_token=${accessToken}`
);
const meData = await meRes.json();
// 4. Save session
const cookieStore = await cookies();
setSessionCookies(cookieStore, accessToken, {
name: meData.name || 'User',
picture: meData.picture?.data?.url || '',
@ -74,8 +99,12 @@ export async function GET(request: NextRequest) {
return NextResponse.redirect(new URL('/dashboard', request.url));
} catch (err) {
console.error('[Auth] OAuth error:', err);
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
)
);
}
}
}