create-nicsde-next-app
Version:
A CLI tool to create Next.js applications with custom configurations
65 lines (56 loc) • 1.98 kB
text/typescript
export async function POST(request: Request) {
try {
const formData = await request.formData();
const code = formData.get('code');
const access_token_body = new URLSearchParams({
grant_type: 'authorization_code',
code: code as string,
client_id: process.env.AUTH_CLIENT_ID as string,
client_secret: process.env.AUTH_CLIENT_SECRET as string,
});
const access_token_url = `${process.env.NEXT_PUBLIC_AUTH_TONGJI_URL}/idp/oauth2/getToken`;
const response = await fetch(access_token_url, {
headers: {
'Content-Type': 'application/x-www-form-urlencoded; charset=utf-8',
},
body: access_token_body,
method: 'POST',
});
// 先检查响应状态
if (!response.ok) {
const errorText = await response.text();
console.error('Token endpoint error:', errorText);
return Response.json(
{ error: 'Token endpoint returned error' },
{ status: 400 }
);
}
// 检查内容类型是否为JSON
const contentType = response.headers.get('content-type');
if (!contentType?.includes('application/json')) {
const text = await response.text();
console.error('Non-JSON response:', text);
return Response.json(
{ error: 'Invalid response format' },
{ status: 400 }
);
}
const data = await response.json();
if (!data.access_token) {
return Response.json(
{ error: 'Invalid token response' },
{ status: 400 }
);
}
return Response.json({
...data,
token_type: data.token_type || 'Bearer'
});
} catch (error) {
console.error('Token route error:', error);
return Response.json(
{ error: 'Internal server error' },
{ status: 500 }
);
}
}