You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 14:20:10