迁移至google.accounts.id后,如何检查用户是否已登录?
问题(翻译后)
我正在迁移到基于google.accounts.id的较新谷歌认证API。在旧API中,我可以通过gapi.auth2.getAuthInstance().isSignedIn.get()检查用户是否已登录,再决定是否显示登录按钮。请问新的google.accounts.id方案中,对应的等价方法是什么?
谷歌GSI API(google.accounts.id)检查登录状态的等价方案
在新的谷歌身份服务(GSI,基于google.accounts.id)中,没有直接对应旧APIgapi.auth2.getAuthInstance().isSignedIn.get()的方法——新API的设计逻辑更偏向触发式凭据获取,而非主动查询登录状态。不过可以通过以下两种方式实现类似的“判断是否显示登录按钮”的需求:
1. 利用自动提示(Prompt)机制
初始化API后调用google.accounts.id.prompt(),该方法会自动检测用户的谷歌登录状态与授权情况,并通过回调告知结果:
// 初始化API google.accounts.id.initialize({ client_id: '你的客户端ID', callback: handleCredentialResponse // 用户登录/授权成功后的回调 }); // 触发登录状态检查 google.accounts.id.prompt((notification) => { if (notification.isNotDisplayed()) { // 用户未登录谷歌,或未授权你的应用,需要渲染登录按钮 google.accounts.id.renderButton( document.getElementById('g_id_signin'), { theme: 'outline', size: 'large' } // 按钮样式配置 ); } else if (notification.isSkippedMoment()) { // 用户已登录但跳过了自动提示,可根据需求决定是否显示按钮 } }); // 处理登录成功后的凭据 function handleCredentialResponse(response) { // 这里可以解析response中的用户信息,完成后续逻辑 console.log('用户凭据:', response); }
2. 检查用户是否已授权指定作用域
如果你的需求是判断用户是否已授权应用的特定权限(间接判断是否已登录过你的应用),可以使用google.accounts.id.hasGrantedScopes():
const hasAuthorized = google.accounts.id.hasGrantedScopes({ client_id: '你的客户端ID', scope: 'email profile' // 你需要检查的作用域 }); if (!hasAuthorized) { // 用户未授权,显示登录按钮 google.accounts.id.renderButton( document.getElementById('g_id_signin'), { theme: 'outline', size: 'large' } ); }
注意:第二种方法仅检查用户是否授权过你的应用,无法直接判断用户当前是否处于谷歌登录状态,适合已授权用户的状态校验场景。
内容的提问来源于stack exchange,提问作者Mike Hogan
相关产品推荐
相关产品推荐

