Openidを使用してユーザーをログインしています(Googleアカウントのみ)。ページにログアウトリンクがあり、クリックすると、ユーザーがGoogleアカウントからログアウトされ、ページが自分のホームページにリダイレクトされます。これはできますか?
編集-
承認された回答を変更します。これは、Googleが必要なドメインに[続行]をリダイレクトできるようになったためです。
ユーザーがログアウトリンクをクリックしたときにこの関数を呼び出すこの問題を解決しました。
var logout = function(){
document.location.href = "https://www.google.com/accounts/Logout?continue=https://appengine.google.com/_ah/logout?continue=http://www.example.com";
}
ユーザーがリンクをクリックすると、ブラウザーはユーザーをログアウトページにリダイレクトし、ログアウトが完了した場合にのみ、ユーザーはサイトにリダイレクトされます " http://www.example.com " 。
これがお役に立てば幸いです。
課題
リクエスト https://www.google.com/accounts/Logout はユーザーをログアウトします。 Googleが時々そのアドレスに追加するcontinueUrlパラメータがありますが、ターゲットが自分のサイトではなく、Googleサイトである場合にのみ、ユーザーのリダイレクトに成功します。これにより、アプローチが使用できなくなります。
さらに、OpenID仕様には、現時点ではグローバルログアウトは含まれていません。
別の方法があります:
提案
ページにIFrameを組み込み、ログアウトリンクのonClick JavaScriptイベントハンドラーを使用して https://www.google.com/accounts/Logout をIFrameに読み込みます。その後(IFrameが正常に読み込まれたかどうかを確認したい場合があります)、ユーザーを自分のサイトのログアウト手順にリダイレクトします。ログアウトした後、そのページをホームページにリダイレクトします。
リンクは次のようになります。
_<a href="https://www.google.com/accounts/Logout"
onclick="myIFrame.location='https://www.google.com/accounts/Logout';StartPollingForCompletion();return false;">
log out</a>
<iframe id="myIFrame"></iframe>
_
ログアウトページがロードされたかどうかを定期的にチェックするには、StartPollingForCompletion()
関数を実装する必要があります。 setTimeout()
を使用してポーリングの時間を計り、IFrameのいくつかのプロパティを確認します(ここでクロスサイトで作業しているため、どれが機能するかはわかりません)。
次の質問もご覧ください。
私も同じことをしようとしています。 Googleアプリのみ-
ログアウトするには、次の2つのオプションを試してください。
1)iフレームの使用-
<iframe src="https://mail.google.com/a/YOURDOMAIN.IN/?logout&hl=en" width="100%" height="300">
<p>Your browser does not support iframes.</p>
</iframe>
2)JavaScriptの使用-
<script type="text/javascript">
window.open('https://mail.google.com/a/YOURDOMAIN.IN/?logout&hl=en','logout_from_google','width=600,height=300,menubar=no,status=no,location=no,toolbar=no,scrollbars=no,top=20,left=20');
</script>
私のアプリ(Node/MongoDBサーバーで、Google DocsとGoogle Script APIを大量に使用している)のこのgoogleログイン/ログアウトの問題にhuge時間を費やしたので、共有する必要がありました。ここに私の結果..
ユーザーを完全にログアウトするには、これを使用するのが唯一の良い方法です。
var newWindow = window.open('https://mail.google.com/mail/?logout&hl=fr','Disconnect from Google','width=100,height=50,menubar=no,status=no,location=no,toolbar=no,scrollbars=no,top=200,left=200');
setTimeout(function(){
if (newWindow) newWindow.close();
window.location="auth/google";
},3000);
上記のiraによって提供されたソリューションを使用する場合、ブラウザーの現在のタブに対して、部分的にログアウトしているように見えます。つまり、ユーザーがタブを閉じてアプリケーションを再度開いた場合でも、以前のアカウントにログインしたままになります。
メールのgoogleアカウントからログアウトした後、アプリに正しくリダイレクトできなかったため、外部ウィンドウを使用する必要がありました。このソリューションは、ユーザーの帯域幅が遅すぎない場合、ほとんどの場合機能し、ポップアップを閉じる前にログアウトが完了するまで3秒かかります。次に、ユーザーはメインウィンドウアプリで別のアカウントを使用してログインする必要があります。
これは、floccinaucinihilipilificationのソリューションを確認し、おそらく上記のiframeソリューションは私のソリューションより優れているはずです。
私は同じことをしただけで、ユーザーをログアウトしました。どういうわけか受け入れられた答えは私のために機能しません、私はグーグルからエラーを得ました
The page you requested is invalid.
だから私はこれを私のページに入れました:
<img src="https://www.google.com/accounts/Logout" />
これにより、ユーザーが正常にログアウトされます。 ソース
私がやったことが正しかったかわかりません。しかし、私はこのようなコードをなんとか使用しました:
<a class="btn btn-default navbar-btn text-white" id="signOut" href="../home.html" onclick="signOut('https://www.google.com/accounts/Logout');">Sign out</a>
<script>
function signOut() {
var auth2 = gapi.auth2.getAuthInstance();
auth2.signOut().then(function () {
console.log('User signed out.');
});
}
firebase.auth().signOut().then(function() {
// Sign-out successful.
alert('You have Signed Out. Please Sign In');
}).catch(function(error) {
// An error happened.
alert('An error happened');
});
</script>
このコードを使用して、Googleアカウントからログアウトします。エラーがスローされますが、心配しないでください。エラーが発生した直後に、アプリケーションサーバー側のサインアウトルートにリダイレクトされます。
<a href="https://www.google.com/accounts/Logout" target="myiframe">logout</a>
<iframe name="myiframe" style="display:none" onload="redirect()"></iframe>
<script>
function redirect() {
window.location = 'http://your.site.com/signout';
};
</script>
ここに私がやっていることがあります。私がそれを作り上げたのか、どこかに見つけたのを思い出さないでください...それはすべてのGoogleサイトからログアウトするという事実を除いて、それは魅力のように機能します(信じられません)適切な方法を提供しないでください。
<script>
function makeFrame(domId,url) {
ifrm = document.createElement("IFRAME");
ifrm.setAttribute("src", url);
ifrm.setAttribute("id", domId);
ifrm.setAttribute("style", "display:none;");
ifrm.style.width = 1+"px";
ifrm.style.height = 1+"px";
document.body.appendChild(ifrm);
}
function logOutGoogle(){
makeFrame('googleLogoutIFrame','https://www.google.com/accounts/Logout');
}
$(window).ready(function() {
logOutGoogle();
});
</script>