使用 Google 登录 - 以编程方式触发登录而不是按钮

Jsw*_*swk 5 google-authentication google-signin google-one-tap

我正在尝试迁移到新的“使用 Google 登录”,但缺少以前使用过的一项重要功能。

基本上我的应用程序正在与本地创建的应用程序用户一起使用。在应用程序中的某一时刻,系统会提示用户使用 Google 帐户登录,以确认他是执行某些 Google API 操作的正确用户。我可以使用即将弃用的Google Sign-In 库中的以下代码来实现这一目标:

const auth = gapi.auth2.getAuthInstance();

if (!auth.isSignedIn.get())
    await auth.signIn({
        prompt: "select_account",
        login_hint: employeeEmail
    });
...
Run Code Online (Sandbox Code Playgroud)

而且效果很好。现在上述所有方法都已被弃用,并且没有直接替代品,或者至少我不明白如何实现相同的结果。我可以通过检查收到的 id 令牌来确认用户身份:

google.accounts.id.initialize({/*options*/);
...
google.accounts.id.prompt();
Run Code Online (Sandbox Code Playgroud)

但是,如果用户没有活动的 google 会话,则不会发生任何情况。实际触发登录的唯一方法是单击 Google 登录按钮,使用以下方式呈现:

google.accounts.id.renderButton(htmlElement, {/*options*/});
Run Code Online (Sandbox Code Playgroud)

单击按钮后,将显示登录弹出窗口,一切正常,调用初始化配置的回调并恢复流程。

问题是,如何以编程方式触发登录弹出窗口?以上所有内容都是从我网站上的特定按钮单击开始的。

Jsw*_*swk 1

供参考

实际上,我成功地使用新 API 重现了几乎相同的行为。这可能不是最优雅的方法,但我signIngoogle.accounts.oauth2.initTokenClient. 尽管它应该仅用于接收令牌,但它也会创建一个有效的 Google 会话,然后可以使用静默身份验证 ( prompt: "none") 来检测该会话;