为什么 OAuth 流程中的 GitHub 授权按钮是灰色的?

Why is the GitHub authorization button in the OAuth flow grayed out?

我正在构建一个 Android 应用程序,用户可以使用 OAuth 登录 GitHub。我按照说明 here 进行了操作。作为流程的第一部分,我将用户发送到 URL

https://github.com/login/oauth/authorize?scope=repo&client_id=MY_CLIENT_ID

但是,当我在 Android 设备上登录时,Authorize xxxx 按钮显示为灰色,我无法点击它。有谁知道这是为什么? (下面的大屏幕截图)

我想这个按钮以前可能没有变灰,我第一次 运行 应用程序并登录。但是,我不能确定,因为我很匆忙。

因此,我将 link 粘贴到我计算机上的 Chrome 中,OAuth 流程运行良好。我注意到该按钮起初是灰色的,但后来变成了亮绿色。这让我想知道:在 Android WebView 中是否默认启用了 JavaScript?果然,事实并非如此。我发现 this answer 详细说明了如何启用 JS。这是让一切正常工作的关键行:

webView.getSettings().setJavaScriptEnabled(true);

我绝对支持@james-ko 所说的 - 必须为 WebView 启用 JS

但有时它并没有帮助。我找到了更多信息,很乐意在这里分享。

类似的故事 - 我有一个应用程序应该使用 GitHub OAuth 登录用户,除 "Authorise" 按钮外一切正常 - 在某些情况下无论应用什么设置它都会保持禁用状态.

摘要如下:

  1. 无论设置和用户行为如何,API 22 和 23(尽管我没有尝试 24-27),该按钮在模拟器上始终处于禁用状态。

  2. 它在 API 28 和 29 的模拟器上运行良好。

  3. 在真实设备 Pixel 3 (API 29) 上,按钮最初是禁用的,有一段时间没有任何反应。但是当我在随机位置点击屏幕两次时,它就被启用了。重新启动的应用重现了这种情况:最初禁用的按钮 --> 点击屏幕 --> 按钮被启用。

显然涉及一些反欺诈机制。

但它给最终用户带来的体验有点差,它看起来像是应用程序中的一个错误,我们对此无能为力:-/

我在 Safari 中遇到了同样的问题,但我找到了一个潜在的原因,网站的内容安全策略设置为:script-src github.githubassets.com