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');
|
||||
|
||||
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
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Reference in a new issue