我最近才知道Google Oauth is not allowed in webviews。这意味着,如果你有一个foo.com使用谷歌Oauth的应用程序www.example.com,你通过Instagram发送foo.com给用户。
该用户将无法登录,因为Instagram/Tiktok/Gmail和许多其他社交媒体网站使用其应用内浏览器打开链接。
我还学到了广告也可以使用应用内浏览器打开,这意味着点击广告的用户在尝试登录时基本上遇到了死胡同。
我一直在想办法:
1.让foo.com强制登录页面在原生浏览器中打开。我还没找到解决办法。
1.一些手动重定向到google oauth。
1.告诉用户他们的浏览器不受支持,他们必须手动打开它。(最不适合)
1.重新构建身份验证系统,使其具有本机用户名和密码。
下面是一个示例代码:
<html>
<body>
<script src="https://accounts.google.com/gsi/client" async defer></script>
<script>
function handleCredentialResponse(response) {
console.log("Encoded JWT ID token: " + response.credential);
}
window.onload = function () {
google.accounts.id.initialize({
client_id: "YOUR_GOOGLE_CLIENT_ID",
callback: handleCredentialResponse
});
google.accounts.id.renderButton(
document.getElementById("buttonDiv"),
{ theme: "outline", size: "large" } // customization attributes
);
google.accounts.id.prompt(); // also display the One Tap dialog
}
</script>
<div id="buttonDiv"></div>
</body>
</html>
1条答案
按热度按时间f0brbegy1#
我发现了几个类似的问题,但没有一个有解决方案。
应用浏览器和Webview Bypass中的Google OAuth
Google OAuth 2.0 client ID authorization via embedded webview
我想我要做的是检测用户是否在webview中(在我的情况下,通过使用浏览器gem:https://github.com/fnando/browser)。然后,在Google SSO按钮所在的位置,我将显示某种消息,如
We don't support signing in via embedded webviews. Please open this page in a browser.