始终提示用户在应用程序启动时选择一个帐户

Posted

技术标签:

【中文标题】始终提示用户在应用程序启动时选择一个帐户【英文标题】:Always prompt user to select an account on application start 【发布时间】:2019-06-03 15:18:37 【问题描述】:

我正在使用来自code samples 的代码在应用程序启动时对用户进行身份验证。

UserCredential credential;
using (var stream = new FileStream("client_secrets.json", FileMode.Open, FileAccess.Read))

    credential = await GoogleWebAuthorizationBroker.AuthorizeAsync(
        GoogleClientSecrets.Load(stream).Secrets,
        new[]  YouTubeService.Scope.Youtube ,
        "user",
        CancellationToken.None,
        new FileDataStore(this.GetType().ToString())
    );


var youtubeService = new YouTubeService(new BaseClientService.Initializer()

    HttpClientInitializer = credential,
    ApplicationName = this.GetType().ToString()
);

除了我想强制每次都显示“选择帐户”屏幕(现在它只显示第一次,然后记住用户)之外,一切正常,因为该应用程序应该允许不同的用户登录.

看起来我应该将prompt请求参数设置为select_account,但我不知道我应该怎么做,AuthorizeAsync方法不接受任何额外的参数。

【问题讨论】:

如果您想允许不同的用户登录,我会考虑添加注销流程,而不是每次打开应用时都强制用户登录。这不是很人性化 OP 已经有了正确的解决方案。他需要使用 c# 库设置prompt=select_account。退出是不合适的 是的,我只是不知道该怎么做:D 我非常反对那些让简单的东西变得复杂的库。直接调用 OAuth 端点可能值得。就我个人而言,我觉得这更简单、更健壮。 我只能讲述我自己第一次与 Google OAuth 争论的经历。我尝试使用库(Java 和 JS)作为阻力最小的明显路径,并且不断地被泄漏的抽象、版本地狱和过时的文档绊倒。只有当我开始直接调用端点时,事情才开始稳健地工作,并且以一种与我的特定用例一​​致的方式工作。向@chris 表示支持,因为他们的 PR 响应如此之快。 【参考方案1】:

您说得对,这目前无法以简单的方式完成。

我已经提交了一个错误来解决这个问题:https://github.com/googleapis/google-api-dotnet-client/issues/1322

【讨论】:

酷,我看到你已经关闭了这个问题。我现在正在等待下一个版本? v1.37.0 现已发布此修复程序。 您需要使用GoogleWebAuthorizationBroker.AuthorizeAsync 的重载,它采用GoogleAuthorizationCodeFlow.Initializer。请参阅此处了解如何配置它:github.com/googleapis/google-api-dotnet-client/blob/…

以上是关于始终提示用户在应用程序启动时选择一个帐户的主要内容,如果未能解决你的问题,请参考以下文章

每次用户登录时,Facebook 登录都使用相同的帐户

iOS 13 中“始终允许”位置的问题

每次用户登录时,Google 登录都使用相同的帐户

如何获得提示,要求用户在登录时输入其帐户详细信息?

部署时 WIX MSI 应用程序未在用户帐户下启动应用程序

使用Firebase Google用户身份验证更改用户