Vercel生产环境下Spotify身份认证失败无法跳转主页问题求助
问题根因
- 核心错误是将NextAuth所需的服务端敏感环境变量添加了
NEXT_PUBLIC_前缀,导致服务端认证逻辑无法正常读取变量,token校验失败,middleware判断用户未登录,触发重定向回到登录页。 - 次要可能原因为NEXTAUTH_URL配置不规范、middleware缺少路径匹配规则、Spotify回调地址未完全匹配。
解决方案
1. 修正环境变量配置
登录Vercel项目控制台,进入「Settings > Environment Variables」页面,修改以下配置:
- 删除原有
NEXT_PUBLIC_CLIENT_SECRET、NEXT_PUBLIC_CLIENT_ID变量,新增CLIENT_SECRET、CLIENT_ID变量,填入对应的值(这两个为服务端敏感变量,禁止添加NEXT_PUBLIC_前缀,否则会暴露到前端且服务端认证逻辑无法读取) - 确认
NEXTAUTH_URL变量值为完整域名https://sp-app.vercel.app,无尾斜杠 - 确认
JWT_SECRET值为和本地开发一致的随机字符串,长度不低于32位
2. 调整代码逻辑
登录页代码调整
将登录按钮的signIn调用删除手动指定的callbackUrl参数,改为默认逻辑即可:
<button onClick={()=>signIn(provider.id)}>Login with {provider.name}</button>
middleware代码调整
在middleware文件末尾添加路径匹配规则,避免拦截不需要校验的静态资源,同时确认导入依赖:
import { NextResponse } from 'next/server' // 原有middleware代码保持不变 export const config = { matcher: ['/', '/((?!api/auth|_next/static|_next/image|favicon.ico).*)'], }
3. 校验第三方配置
登录Spotify开发者后台,确认重定向URI配置完全为https://sp-app.vercel.app/api/auth/callback/spotify,无拼写错误、多余字符、大小写错误。
4. 重新部署
在Vercel控制台触发一次全新的全量部署,不要使用缓存的增量部署,确保所有环境变量和代码修改生效。
内容的提问来源于stack exchange,提问作者Sai Krishnadas
相关产品推荐
相关产品推荐

