Next.js14.2+TypeScript中改写Spotify刷新令牌代码的方法
Next.js 14.2 + TypeScript 实现 Spotify 令牌刷新接口
下面是适配 Next.js 14.2 App Router 的路由处理器代码,替换你提供的旧版 Node.js 代码,同时支持将新令牌保存到数据库:
步骤 1:创建路由文件
在你的项目中创建 app/api/refresh-token/route.ts 文件,这是 Next.js App Router 下的 API 路由入口。
完整代码实现
import { NextResponse } from 'next/server'; // 定义 Spotify 返回的令牌数据类型 interface SpotifyTokenResponse { access_token: string; token_type: string; expires_in: number; refresh_token?: string; } export async function GET(request: Request) { // 从环境变量获取 Spotify 客户端凭证(需在 .env.local 中配置) const clientId = process.env.SPOTIFY_CLIENT_ID; const clientSecret = process.env.SPOTIFY_CLIENT_SECRET; // 校验环境变量是否存在 if (!clientId || !clientSecret) { return NextResponse.json( { error: 'Spotify 客户端凭证未配置' }, { status: 500 } ); } // 从请求查询参数中获取刷新令牌 const { searchParams } = new URL(request.url); const refreshToken = searchParams.get('refresh_token'); if (!refreshToken) { return NextResponse.json( { error: '缺少 refresh_token 参数' }, { status: 400 } ); } try { // 构建认证头 const authHeader = `Basic ${Buffer.from(`${clientId}:${clientSecret}`).toString('base64')}`; // 向 Spotify API 发送刷新令牌请求 const response = await fetch('https://accounts.spotify.com/api/token', { method: 'POST', headers: { 'Content-Type': 'application/x-www-form-urlencoded', Authorization: authHeader, }, body: new URLSearchParams({ grant_type: 'refresh_token', refresh_token: refreshToken, }), }); if (!response.ok) { throw new Error(`Spotify API 请求失败:${response.statusText}`); } const tokenData: SpotifyTokenResponse = await response.json(); // 提取新的访问令牌和刷新令牌(Spotify 不一定每次都返回新的 refresh_token) const newAccessToken = tokenData.access_token; const newRefreshToken = tokenData.refresh_token || refreshToken; // 将令牌保存到数据库(替换为你的实际数据库操作逻辑) // 示例: // await db.user.update({ // where: { refreshToken: refreshToken }, // data: { accessToken: newAccessToken, refreshToken: newRefreshToken } // }); // 返回新令牌给客户端 return NextResponse.json({ access_token: newAccessToken, refresh_token: newRefreshToken, }); } catch (error) { console.error('令牌刷新失败:', error); return NextResponse.json( { error: '令牌刷新失败' }, { status: 500 } ); } }
关键说明
- 环境变量配置:在项目根目录创建
.env.local文件,添加SPOTIFY_CLIENT_ID和SPOTIFY_CLIENT_SECRET两个变量,值从 Spotify 开发者后台获取。 - 数据库操作:替换代码中注释的数据库更新逻辑,适配你使用的数据库(如 Prisma、MongoDB 等)。
- 错误处理:包含了环境变量校验、参数缺失、API 请求失败等多种异常场景的处理。
- TypeScript 类型:定义了
SpotifyTokenResponse接口,确保类型安全。
使用方式
客户端可以通过 GET 请求访问 /api/refresh-token?refresh_token=你的旧刷新令牌,获取新的访问令牌和刷新令牌。
内容的提问来源于stack exchange,提问作者user24266491
相关产品推荐
相关产品推荐

