如何通过Google JavaScript GSI SDK在无会话时获取ID Token?
解决Google JS SDK无会话时获取ID Token的问题
当用户无Google会话时,你不需要使用google.accounts.oauth2.initTokenClient(该方法主要用于获取Access Token),直接调用google.accounts.id.signIn()即可触发登录弹窗,登录成功后会自动进入你已配置好的callback,拿到ID Token,和一键登录的流程完全一致。
修改后的代码示例:
google.accounts.id.prompt(async notification => { if (notification.getNotDisplayedReason() === 'opt_out_or_no_session') { // 手动触发Google登录弹窗,登录成功后走initialize里的callback google.accounts.id.signIn(); } }); window.addEventListener('load', () => { google.accounts.id.initialize({ client_id: googleClientId, callback: (user) => { const { credential: idToken } = user; // 在这里处理ID Token,无论是一键登录还是手动触发的登录都会进入此回调 }, }); });
补充说明
google.accounts.id.signIn()会唤起标准的Google登录界面,用户登录后返回的CredentialResponse里包含所需的ID Token,格式和一键登录的返回完全相同。- 若你一定要通过OAuth2流程获取ID Token,需采用授权码流程:
- 用
google.accounts.oauth2.initCodeClient获取授权码 - 将授权码传给后端,由后端调用Google的token接口换取ID Token和Access Token
但这种方式需要后端配合,不如直接用signIn()简洁。
- 用
内容的提问来源于stack exchange,提问作者Rob H
相关产品推荐
相关产品推荐

