我正在开发适用于 iOS、Android 和 Web 的 React Native。今年早些时候,我负责 Android 方面的同事遇到了 Google Sign In 问题,他们的解决方案是完全删除它。
我现在正在尝试重新实现这一点。我在 Web 或 iOS 上没有任何问题,但在 Android 上,我收到以下错误:
错误 400:无效_请求
您无法登录此应用,因为它不符合 Google 保护应用安全的 OAuth 2.0 政策。
您可以让应用开发者知道此应用不符合一项或多项 Google 验证规则。
然后在
Request Details
部分说:
如果您是应用开发者,请确保这些请求详细信息符合 Google 的政策。
- redirect_uri:exp://192...*:19000
我已检查我的
app.json
,以确保我的凭据与我的 Google Cloud Console API 凭据以及 Firebase 凭据相匹配。
我已遵循 Expo 的文档,并且我在 Web 和 iOS 上正确完成了所有操作。
任何帮助将不胜感激,如果需要更多信息,请告诉我。谢谢
编辑
我确实进入了我的
Authorised redirect URIs
并尝试添加exp://192.*.*.*:19000
,但它不允许我这样做。
答案: 您不能将
exp://192.*.*.*:19000
用作具有 Web 应用程序凭据的重定向 uri。必须是 重定向 URI 必须使用 HTTPS 方案,主机不能是原始 IP 地址,重定向 URI 不能包含某些字符,包括:通配符 ('*')
google授权的客户端类型有多种
每种类型都使用略有不同的授权类型。安装的应用程序必须将授权返回到其来源或本地主机。 Web应用程序,授权返回到有效的网址。
对于 Web 应用程序和已安装的应用程序,重定向 uri 用于告诉授权服务器允许将授权代码发送回的位置。这是一项安全措施,可确保任何人都无法通过添加任何重定向 uri 来劫持您的授权。
您无法登录此应用程序,因为它不符合 Google 的 OAuth 2.0 政策以确保应用程序安全。
此错误消息告诉您应用程序发送的重定向 uri 不是有效的重定向 uri。 重定向 URI 验证规则
你可能被这些困住了
您的重定向 URI
exp://192.*.*.*:19000
不是 https,它是一个 IP 地址。这两者都是不允许的。
对于移动应用程序来说,情况完全不同。这种形式的授权通常使用包名称和 SHA-1 来授权用户并正确返回令牌。
我不明白你将如何让它与 React 一起工作。
我设法通过设置使其工作
"expo": {
"scheme": "com.something.somethingelse"
const [request, response, promptAsync] = Google.useIdTokenAuthRequest(
{
clientId: 'myandroid-token.apps.googleusercontent.com',
},
{ native: 'com.something.somethingelse://' }
);
clientId 必须是 android 客户端 id,而不是 Web id
如果您使用“expo-auth-session”库,请尝试将版本更改为“^4.0.3”。它帮助了我。