Next Auth回调中user与account对象为何未定义?
问题排查与解决方法
1. Spotify授权URL配置错误
检查LOGIN_URL是否符合Spotify授权码流程要求,必须包含response_type=code参数,正确格式示例:
const LOGIN_URL = "https://accounts.spotify.com/authorize?response_type=code&scope=user-read-private user-read-email";
如果缺少response_type=code,NextAuth无法获取授权码,也就无法拿到account相关信息。
2. 环境变量使用不当
clientId和clientSecret不应使用NEXT_PUBLIC_前缀,这会把敏感的clientSecret暴露给前端。改为普通环境变量:
SpotifyProvider({ clientId: process.env.SPOTIFY_CLIENT_ID, clientSecret: process.env.SPOTIFY_CLIENT_SECRET, authorization: LOGIN_URL })
确保变量在.env.local中正确配置,且未暴露到客户端。
3. accessToken字段拼写错误
代码里写的account.access_Token是错误的,Spotify返回的字段是access_token(下划线后为小写t),修正为:
accessToken: account.access_token,
这个拼写错误会直接导致token中的accessToken值为undefined,进而session中也无法获取该值。
4. jwt回调执行时机误解
jwt回调并非每次都会传入account和user参数,只有用户首次授权登录时这两个参数才会存在。后续请求session时,jwt回调只会传入token参数,此时account和user为undefined是正常情况,不要在这类场景下依赖这两个参数。
内容的提问来源于stack exchange,提问作者Samarth Shinde
相关产品推荐
相关产品推荐

