Auth0自定义Google社交登录报错‘Invalid user id’求助
问题原因
出现「Invalid user id」错误的核心原因是:你配置的获取用户资料脚本没有返回Auth0识别用户所需的唯一标识字段。Auth0要求该脚本必须返回包含user_id(或标准OIDC字段sub)的用户对象,否则无法完成用户身份关联。
解决方案
1. 修正获取用户资料脚本
替换当前的脚本为以下两种方式之一:
方式一:调用Google用户信息接口(推荐)
通过accessToken调用Google的官方用户信息接口,获取完整用户资料并返回给Auth0:
function(accessToken, ctx, cb) { request.get('https://www.googleapis.com/oauth2/v3/userinfo', { headers: { Authorization: 'Bearer ' + accessToken } }, function(err, resp, body) { if (err) return cb(err); var user = JSON.parse(body); cb(null, { user_id: user.sub, // Google返回的唯一用户ID,必须包含 email: user.email, email_verified: user.email_verified, name: user.name, picture: user.picture }); }); }
方式二:解析id_token的Payload
利用ctx中的id_token(JWT格式)直接解析出用户信息,无需额外请求:
function(accessToken, ctx, cb) { var jwt = require('jsonwebtoken'); var payload = jwt.decode(ctx.id_token); if (!payload) return cb(new Error('Failed to decode id_token')); cb(null, { user_id: payload.sub, // 核心唯一标识字段 email: payload.email, email_verified: payload.email_verified, name: payload.name, picture: payload.picture }); }
2. 验证其他配置细节
- 确认GCP控制台的授权范围已包含
openid(你当前设置的openid email符合要求,若需要更多用户信息可追加profile)。 - 检查GCP的测试用户列表是否包含你用于测试的邮箱地址,确保在测试状态下能正常授权。
- 确认Auth0中的Custom Social配置里,「范围」选项已正确启用空格分隔(你当前已设置,无需修改)。
测试验证
修改脚本后,回到Auth0的Custom Social测试页面,重新发起登录流程,此时Auth0能正确获取到用户的唯一ID,「Invalid user id」错误即可解决。
内容的提问来源于stack exchange,提问作者Adam Straughan
相关产品推荐
相关产品推荐

