Google로 로그인하기 위해 OAuth2를 사용한 애플리케이션에서 로그 아웃하는 방법은 무엇입니까?
내 응용 프로그램에서 jsapi를 사용하여 Google 사인 아웃을 구현했습니다.
URL https://www.googleapis.com/oauth2/v1/tokeninfo?access_token=xxxxxx 를 사용하여 Google에 연결 한 다음 https://www.googleapis.com/plus/v1/people/xxxxxx 를 사용하여 사용자 데이터를 얻었습니다. Google 프로필에서.
이제 내 애플리케이션에서 버튼을 클릭하는 동안 Google에서 사용자를 로그 아웃해야합니다. 이것을 JavaScript에서 어떻게 구현할 수 있습니까? 아니면 적어도 사용자가 로그인 할 때마다 Google 로그인 페이지를 요청해야합니다.
나는 시도 approval_prompt=force
했지만 작동하지 않는 것 같습니다.
OAuth 개요 : 사용자가 누구라고 말하는가? :
"Google로 로그인"옵션과 같이 OAuth를 사용하여 Stack Overflow에 로그인했는지 확실하지 않지만이 기능을 사용할 때 Stack Overflow는 단순히 Google에 귀하가 누구인지 알고 있는지 묻는 것입니다.
"Yo Google, Vinesh 친구가 vinesh.e@gmail.com이 자신이라고 주장합니다. 사실인가요?"
이미 로그인되어있는 경우 Google에서 YES라고 말합니다. 그렇지 않은 경우 Google은 다음과 같이 말합니다.
"잠시만 기다려주세요.이 친구를 인증하겠습니다. Google 계정에 올바른 비밀번호를 입력 할 수 있다면 바로 그 사람입니다."
Google 비밀번호를 입력하면 Google은 사용자가 누구인지를 Stack Overflow에 알리고 Stack Overflow가 로그인합니다.
앱에서 로그 아웃하면 로그 아웃하고 당신의 응용 프로그램 :
여기에서 OAuth를 처음 사용하는 개발자가 때때로 약간 혼란스러워하는 경우가 있습니다. Google과 Stack Overflow, Assembla, Vinesh's-very-cool-slick-webapp은 모두 다른 엔티티이며 Google은 Vinesh의 멋진 웹앱에서 귀하의 계정에 대해 아무것도 모릅니다. 프로필 정보에 액세스하는 데 사용하는 API를 통해 노출되는 것 외에는 마찬가지입니다.
사용자가 로그 아웃하면 사용자는 Google에서 로그 아웃하지 않고 앱, Stack Overflow, Assembla 또는 Google OAuth를 사용하여 사용자를 인증하는 모든 웹 애플리케이션에서 로그 아웃합니다.
실제로 모든 Google 계정에서 로그 아웃해도 여전히 Stack Overflow에 로그인되어 있습니다. 앱에서 사용자가 누구인지 알게되면 해당 사용자는 Google에서 로그 아웃 할 수 있습니다. Google은 더 이상 필요하지 않습니다.
즉, 실제로 귀하에게 속하지 않는 서비스에서 사용자를 로그 아웃하는 것입니다. 다음과 같이 생각해보십시오. 사용자로서 Google 계정으로 5 개의 다른 서비스에 로그인 한 다음 그중 하나에서 처음 로그 아웃하면 Gmail 계정에 로그인해야합니다. 앱 개발자가 애플리케이션에서 로그 아웃하면 Google에서도 로그 아웃해야한다고 결정했기 때문입니다. 그것은 정말 빨리 늙어 갈 것입니다. 요컨대, 당신은 정말로 이것을하고 싶지 않습니다 ...
Yeh yeh, 어쨌든, 여전히 사용자를 Google에서 로그 아웃시키고 싶습니다. 어떻게해야하는지 알려주세요.
당신이 경우 말했다, 함께 아직도 구글의 아웃 사용자가 로그, 당신은 아주 잘 그들의 작업 흐름을 방해 할 수 있다는 것을 인식 할, 당신은 동적으로 Google 서비스 중 하나에서 로그 아웃 URL을 만들 수 버튼을 로그 아웃 한 후 사용하여 호출 있음 img 요소 또는 스크립트 태그 :
<script type="text/javascript"
src="https://mail.google.com/mail/u/0/?logout&hl=en" />
또는
<img src="https://mail.google.com/mail/u/0/?logout&hl=en" />
또는
window.location = "https://mail.google.com/mail/u/0/?logout&hl=en";
사용자를 로그 아웃 페이지로 리디렉션하거나 도메인 간 제한되지 않은 요소에서 호출하면 사용자는 Google에서 로그 아웃됩니다.
이것은 반드시 사용자가 귀하의 애플리케이션에서 로그 아웃된다는 의미는 아니며 Google 만 해당됩니다. :)
요약:
기억해야 할 중요한 점은 앱에서 로그 아웃 할 때 사용자가 암호를 다시 입력하도록 할 필요가 없다는 것입니다. 그게 요점입니다! Google에 대해 인증하므로 사용자가 사용하는 각 웹 애플리케이션에 비밀번호를 반복해서 입력 할 필요가 없습니다. 익숙해지는 데는 약간의 시간이 걸리지 만 사용자가 Google에 로그인되어있는 한 앱은 사용자가 자신이 말하는 사람인지 아닌지에 대해 걱정할 필요가 없습니다.
OAuth와 함께 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";
}
나를 위해 작동합니다 (Java-Android)
void RevokeAcess()
{
try{
HttpClient client = new DefaultHttpClient();
HttpPost post = new HttpPost("https://accounts.google.com/o/oauth2/revoke?token="+ACCESS_TOKEN);
org.apache.http.HttpResponse response = client.execute(post);
}
catch(IOException e)
{
}
CookieManager.getInstance().removeAllCookie(); // this is clear the cookies which tends to same user in android web view
}
안드로이드의 AsyncTask에서이 함수를 호출해야합니다.
로그 아웃 버튼을 생성하고 여기에이 링크를 추가하면 앱에서 자동으로 로그 아웃되고 원하는 사이트로 리디렉션됩니다.
https://appengine.google.com/_ah/logout?continue=http://www.YOURSITE.com
귀하의 웹 사이트로 귀하의 사이트를 전환하십시오.
이는 사용자가 애플리케이션에서 로그 아웃되지만 Google에서는 로그 아웃되지 않습니다.
var auth2 = gapi.auth2.getAuthInstance();
auth2.signOut().then(function () {
console.log('User signed out.');
});
출처 : https://developers.google.com/identity/sign-in/web/sign-in
Ouath는 Google 인스턴스를 null로 만들므로 Google에서 제외됩니다. 이제 아키텍처가 만들어졌습니다. Google에서 로그 아웃하면 앱에서 로그 아웃하는 것이 더러운 일이지만 요구 사항이 동일하면 도움이되지 않습니다. 따라서 signOut () 함수에 다음을 추가하십시오. 내 프로젝트는 Angular 6 앱이었습니다.
document.location.href = "https://www.google.com/accounts/Logout?continue=https://appengine.google.com/_ah/logout?continue=http://localhost:4200";
Here localhost:4200 is the URL of my app. If your login page is xyz.com then input that.
this code will work to sign out
<script>
function signOut()
{
var auth2 = gapi.auth2.getAuthInstance();
auth2.signOut().then(function () {
console.log('User signed out.');
auth2.disconnect();
});
auth2.disconnect();
}
</script>
I hope we can achieve this by storing the token in session while logging in and access the token when he clicked on logout.
String _accessToken=(String)session.getAttribute("ACCESS_TOKEN");
if(_accessToken!=null)
{
StringBuffer path=httpRequest.getRequestURL();
reDirectPage="https://www.google.com/accounts/Logout?
continue=https://appengine.google.com/_ah/logout?
continue="+path;
}
response.sendRedirect(reDirectPage);
It looks like Google recently broke something with their revoke stuff (it's started returning 400 errors for us). You now have to call
auth2.disconnect();
In our case we then have to wait a couple of seconds for the disconnect call to complete otherwise the sign-in code will re-authorise before it's done. It'd be good if google returned a promise from the disconnect method.
'Nice programing' 카테고리의 다른 글
Flask-SQLAlchemy 단일 테이블에서 모든 행을 삭제하는 방법 (0) | 2020.10.08 |
---|---|
Android에서 Html.fromHtml ()을 사용하여 텍스트 색상 강조? (0) | 2020.10.08 |
Google Maps V2를 사용하여 단일 마커를 제거하는 방법은 무엇입니까? (0) | 2020.10.08 |
List Comprehension Python에서 두 개의 for 루프를 프레임하는 방법 (0) | 2020.10.08 |
Scala에서 => 및 () => 의미 (0) | 2020.10.08 |