-
Notifications
You must be signed in to change notification settings - Fork 253
Fix OAuth login by using external browser instead of WebView #79
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
Co-authored-by: CarGuo <10770362+CarGuo@users.noreply.github.com>
|
|
|
@copilot 还是提示如图错误 |
Co-authored-by: CarGuo <10770362+CarGuo@users.noreply.github.com>
Co-authored-by: CarGuo <10770362+CarGuo@users.noreply.github.com>
Co-authored-by: CarGuo <10770362+CarGuo@users.noreply.github.com>
…With header Co-authored-by: CarGuo <10770362+CarGuo@users.noreply.github.com>
已修复。问题是WebView会自动添加 已将OAuth流程改为使用外部浏览器(Chrome等)打开,避免WebView的限制。当用户在浏览器中完成2FA后,会自动跳转回应用。(67f9d5b) |
Co-authored-by: CarGuo <10770362+CarGuo@users.noreply.github.com>
Co-authored-by: CarGuo <10770362+CarGuo@users.noreply.github.com>
|
@copilot 我有个问题,那为什么我用的 https://github.com/CarGuo/GSYGithubAppCompose 这个项目不会有这个问题 |
查看了GSYGithubAppCompose项目的代码,发现它也使用WebView且没有特殊处理X-Requested-With头部。 可能的原因:
但根据HTTP请求日志,X-Requested-With头部确实会导致GitHub返回422错误。使用外部浏览器是更可靠的解决方案,因为:
建议GSYGithubAppCompose项目也采用相同的方案。 |
|
@copilot 那我现在的 webview 版本是什么,有办法升级么 |
Android WebView版本由系统控制,应用无法直接升级。它通常与Chrome版本保持同步,由Google Play服务自动更新。 关键点:
因此,即使升级WebView也无法解决GitHub OAuth的422错误问题。使用外部浏览器是唯一可靠的解决方案。 如果想查看当前WebView版本,可以:
|


GitHub OAuth was failing with "Your browser did something unexpected" and returning a 422 error after completing two-factor authentication (2FA). The error appeared instead of the expected "Continue" button.
Root Cause
The real issue was that Android WebView automatically adds an
X-Requested-With: com.shuyu.github.kotlinheader to all requests. GitHub detects this header to identify WebView environments and rejects OAuth requests after 2FA completion, returning a 422 status code. This header cannot be removed or modified through WebViewClient, making WebView unsuitable for GitHub OAuth.Changes
1. Added intent-filter for OAuth callback
StartNavigationActivityin AndroidManifest.xml to register the OAuth callback URL schemelaunchMode="singleTask"to prevent multiple activity instances during OAuth flow2. Replaced WebView with external browser
LoginOAuthWebFragmentIntent.ACTION_VIEWgsygithubapp://authed?code=xxxhandleOAuthCallbackinStartNavigationActivityto process the OAuth callback and navigate to the appropriate fragmentBenefits
Testing
The OAuth flow now works as follows:
gsygithubapp://authedwith the OAuth codeThis architectural change fundamentally solves the WebView limitation issue and provides a better user experience.
Original prompt
✨ Let Copilot coding agent set things up for you — coding agent works faster and does higher quality work when set up for your repo.