Google के साथ लॉगिन करने के लिए मैंने OAuth2 का उपयोग करने वाले एप्लिकेशन का लॉगआउट कैसे किया?


84

अपने आवेदन में, मैंने jsapi का उपयोग करके Google साइनआउट किया।

मैंने Google से कनेक्ट करने के लिए url https://www.googleapis.com/oauth2/v1/tokeninfo?access_token=xxxxxx का उपयोग किया और फिर https://www.googleapis.com/plus/v1/people/xxxxxx उपयोगकर्ता डेटा प्राप्त करने के लिए Google प्रोफ़ाइल से।

अब मुझे अपने एप्लिकेशन के एक बटन पर क्लिक करते समय Google से उपयोगकर्ता को साइनआउट करने की आवश्यकता है। मैं इसे जावास्क्रिप्ट में कैसे लागू कर सकता हूं, या कम से कम इसे उपयोगकर्ता द्वारा साइन इन करने पर हर बार Google लॉगिन पृष्ठ से पूछना होगा।

मैंने कोशिश की है approval_prompt=force, लेकिन काम नहीं कर रहा है।

जवाबों:


243

औथ का अवलोकन: क्या वह कौन है / वह कहता है / वह है?

मुझे यकीन नहीं है कि अगर आपने "Google के साथ लॉगिन" विकल्प की तरह, स्टैक ओवरफ्लो में प्रवेश करने के लिए OAuth का उपयोग किया है, लेकिन जब आप इस सुविधा का उपयोग करते हैं, तो स्टैक ओवरफ्लो केवल Google से पूछ रहा है कि क्या आपको पता है कि आप कौन हैं:

"यो गूगल, इस विनेश फेला का दावा है कि vinesh.e@gmail.com वह है, क्या यह सच है?"

यदि आप पहले से लॉग इन हैं, तो Google YES कहेगा। यदि नहीं, तो Google कहेगा:

"एक स्टैक ओवरफ्लो पर लटकाओ, मैं इस फेला को प्रमाणित करूंगा और यदि वह अपने Google खाते के लिए सही पासवर्ड दर्ज कर सकता है, तो यह है"।

जब आप अपना Google पासवर्ड डालते हैं, तो Google Stack Overflow को बताता है कि आप कौन हैं जो आप कहते हैं, और Stack Overflow आपको लॉग इन करता है।

आप अपने अनुप्रयोग से प्रस्थान करते हैं, तो आप में से प्रवेश कर रहे हैं अपने एप्लिकेशन:

यहाँ है जहाँ OAuth के लिए नए डेवलपर्स कभी-कभी थोड़ा भ्रमित हो जाते हैं ... Google और स्टैक ओवरफ़्लो, असेंबला, विनेश का बहुत अच्छा-चालाक-वेबैप, सभी अलग-अलग निकाय हैं, और Google को विनेश के कूल वेबएप और वाइस पर आपके खाते के बारे में कुछ भी नहीं पता है वर्ना, उस एपीआई से अलग जो आप प्रोफाइल जानकारी तक पहुँचने के लिए उपयोग कर रहे हैं।

जब आपका उपयोगकर्ता लॉग आउट करता है, तो वह Google से लॉग आउट नहीं कर रहा है, वह आपके ऐप, या स्टैक ओवरफ़्लो, या असेंबला, या जो भी वेब एप्लिकेशन Google OAuth का उपयोग करता है, उपयोगकर्ता को प्रमाणित करने के लिए लॉग आउट कर रहा है।

वास्तव में, मैं अपने सभी Google खातों से लॉग आउट कर सकता हूं और फिर भी स्टैक ओवरफ्लो में लॉग इन हो सकता हूं। एक बार जब आपका ऐप जानता है कि उपयोगकर्ता कौन है, तो वह व्यक्ति Google से लॉग आउट कर सकता है। Google की अब आवश्यकता नहीं है।

इसके साथ ही, आप जो करने के लिए कह रहे हैं वह उपयोगकर्ता को उस सेवा से लॉग आउट करना है जो वास्तव में आपके पास नहीं है। इसके बारे में इस तरह से सोचें: एक उपयोगकर्ता के रूप में, आपको कितना गुस्सा आता है, मुझे लगता है कि यदि मैं अपने Google खाते के साथ 5 अलग-अलग सेवाओं में लॉग इन करता हूं, तो पहली बार जब मैंने उनमें से एक को लॉग आउट किया, तो मुझे अपने जीमेल खाते में लॉगिन करना होगा। फिर से क्योंकि उस एप्लिकेशन डेवलपर ने यह निर्णय लिया कि, जब मैं उसके आवेदन से लॉग आउट होता हूं, तो मुझे Google से भी लॉग आउट होना चाहिए? यह वास्तव में तेजी से पुराना हो रहा है। संक्षेप में, आप वास्तव में ऐसा नहीं करना चाहते ...

हाँ, जो भी हो, मैं अभी भी उपयोगकर्ता को Google से लॉग आउट करना चाहता हूं, बस मुझे बताएं कि मैं यह कैसे करूं?

इसके साथ ही, यदि आप अभी भी किसी उपयोगकर्ता को Google से लॉग आउट करना चाहते हैं, और यह महसूस करते हैं कि आप उनके वर्कफ़्लो को अच्छी तरह से बाधित कर सकते हैं, तो आप डायनामिक रूप से उनके किसी एक Google सेवा लॉगआउट बटन से लॉग इन कर सकते हैं, और फिर उसका उपयोग कर सकते हैं। एक 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 प्रोफ़ाइल जानकारी का उपयोग करके मेरे पास एक परियोजना में समान कार्यान्वयन है। मैंने वही कोशिश की जिसे आप आज़माना चाह रहे हैं, और यह वास्तव में लोगों को तब गुस्सा दिलाता है जब उन्हें बार-बार Google में लॉगिन करना पड़ता था, इसलिए हमने उन्हें Google से लॉग आउट करना बंद कर दिया। :)


8
आपके बहुमूल्य समय और इतने बड़े विवरण के लिए धन्यवाद। लेकिन मेरे मुवक्किल की एक अलग राय है। मान लीजिए कि उपयोगकर्ता ने एक सार्वजनिक प्रणाली से अपने Google लॉगिन का उपयोग करके आवेदन में प्रवेश किया है और आवेदन से लॉग आउट हो गया है। वह सोच सकता है कि उसने Google से भी लॉग आउट किया था, लेकिन वास्तव में नहीं! सिस्टम का उपयोग करने वाला कोई भी अन्य उपयोगकर्ता बाद में Google खाते तक पहुंच प्राप्त करेगा।
विनेश ईजी

12
फिर आपके उपयोगकर्ताओं को Google से लॉग आउट करने की आवश्यकता है। मुद्दा यह है, वे 2 सेवाओं में प्रवेश कर रहे हैं। आपके उपयोगकर्ताओं को OAuth का उपयोग करना सीखना होगा। :) मैं आपके ग्राहक और उपयोगकर्ताओं को शिक्षित करने का सुझाव दूंगा। यदि आपको जाना है, तो आगे बढ़ें और उन्हें दिखाएं। इसे लागू करने में लंबा समय नहीं लेना चाहिए और फिर बाद में जब आपको पता चलता है कि यह कितना बेकार है। :) मैंने अपने लिए तब तक इस पर विश्वास नहीं किया जब तक कि मैंने वास्तव में ऐसा नहीं किया और देखा कि LoopToDo से लॉग आउट होने पर हर बार फिर से Google में लॉग इन करना पड़ा। शायद एक संदेश पर विचार करें "आप विनेश के शांत ऐप से लॉग आउट हैं, Google से लॉग आउट करना न भूलें <!"
15:25 पर jmort253

1
@ jmort253 हाँ मैं समझता हूँ कि उन्हें अब अनुमति प्रदान करने की आवश्यकता नहीं है, लेकिन मुझे उन्हें फिर से कैसे प्रमाणित करना चाहिए? कृपया यह प्रश्न देखें कि मैंने क्या किया है (मैं अभी भी OAuth में नया हूं): stackoverflow.com/questions/37515836/…
अपूर्व कांसल

1
@ jmort253 हालांकि, अगर उपयोगकर्ता "डिस्कनेक्ट" शब्द का उपयोग करता है, तो इसका अर्थ है कि एप्लिकेशन से कुल लॉग आउट हो गया है .. क्योंकि यह ऑटो फिर से क्रेडेंशियल में टाइप किए बिना वापस लॉग इन करता है, 2 मुद्दे हैं; उपयोगकर्ता आश्चर्य करता है कि क्या हो सकता है कि मैंने अभी डिस्कनेक्ट कर दिया है और इसमें मेरी जानकारी नहीं होनी चाहिए और दूसरा उपयोगकर्ता एक अलग खाते में साइन इन नहीं कर पाएगा क्योंकि यह हमेशा तब तक ऑटो लॉग होगा जब तक कि प्रदाता प्रदान नहीं करता है। तो इस मामले में, लॉगआउट करना वांछनीय है ताकि यह कुकीज़ को अमान्य कर सके और आपको अब इस बारे में चिंता करने की ज़रूरत नहीं है कि क्लाइंट साइड पर इसका प्रबंधन कैसे किया जाता है।
darewreck

1
यह इलेक्ट्रॉन अनुप्रयोगों के लिए उपयोगी है, जहां उपयोगकर्ता Google के साथ लॉग इन करता है! इस मामले में, उन्हें Google से लॉग आउट करने से वे केवल एक ऐप (इलेक्ट्रॉन ऐप) से लॉग आउट होते हैं।
trusktr

21

आप लॉग आउट कर सकते हैं और अपनी साइट पर फिर से भेज सकते हैं:

var logout = function() {
    document.location.href = "https://www.google.com/accounts/Logout?continue=https://appengine.google.com/_ah/logout?continue=http://www.example.com";
}

1
आखिरकार! धन्यवाद! मैं एक पूरे दिन के लिए कोशिश कर रहा हूं कि लॉगआउट कैसे करें, अगले उपयोगकर्ता को पिछले उपयोगकर्ता के रूप में लॉगिन करने के लिए केवल एक क्लिक करके ईमेल या पासवर्ड को जाने बिना रोकने के लिए ...
कुछ

1
यह काम नहीं करता है, क्योंकि यह एक ही पृष्ठ को दूसरे टैब में खोलने के लिए पर्याप्त है, और आप फिर से लॉग इन कर रहे हैं ...
बार्टोलोमिएज सेमासिस्की

5

मेरे लिए, यह काम करता है (जावा - 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
}

आपको इस फ़ंक्शन को Android में AsyncTask पर कॉल करना होगा


2
हालांकि यह सच है कि यह काम करेगा, सवाल वास्तव में जावा के बारे में नहीं बल्कि जावास्क्रिप्ट के बारे में पूछ रहा है।
jmort253

2
यह अजीब लगता है कि आप सभी की जरूरत है एक टोकन है, आप सभी को जबरन लॉगआउट करने के लिए Google को मजबूर कर सकते हैं।
आर्किमिडीज ट्रैजानो

यह आपको डिवाइस से लॉग आउट नहीं करेगा, यह केवल एप्लिकेशन (एंड्रॉइड) में लॉग आउट करेगा।
विनोज जॉन होसन

2
Google oauth2 डॉक्स में से कुछ को देखने से एक विशिष्ट एक्सेस टोकन इस तरह दिखता है। "1 / fFAGRNJru1FTz70BzhT3Zg" मान लेना "1 /" भाग केवल मनुष्यों के लिए संख्या को आसान बनाने के लिए है। आपके पास अभी भी 22 वर्णों की लंबाई के साथ दो अक्षर (ऊपरी और निचले मामले) और दस संख्यात्मक अंक हैं। वह 22 ^ (26 * 2 + 10) है जो 1.6990502e + 83 के बराबर है। या ज्ञात ब्रह्मांड में परमाणुओं की संख्या के बारे में । सौभाग्य है कि HTTP पर मजबूर करने के लिए जानवर। ;)
क्रिस बालोग

यह ताज़ा टोकन को रद्द करने के लिए प्रतीत नहीं होता है, जो कुकीज़ को हटाने से पहले चोरी हो सकता है (यदि यह वहां संग्रहीत है)।
ओन्द्रेज गाल्बावी

1

आप बस एक लॉगआउट बटन बना सकते हैं और इस लिंक को इसमें जोड़ सकते हैं और यह पूरी तरह से आपको ऐप से लॉग आउट कर देगा और आपकी इच्छित साइट पर रीडायरेक्ट कर देगा:

https://appengine.google.com/_ah/logout?continue=http://www.YOURSITE.com

बस अपनी वेबसाइट के साथ आपका टॉगल करें


1

यह उपयोगकर्ता को एप्लिकेशन से साइन आउट करने का काम करता है, लेकिन 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


1
यह पूरी तरह से उपयोगकर्ता को उसके Google खाते से साइन आउट नहीं करेगा। यह केवल उसी को नष्ट करता है AuthInstanceजिसका आपने उपयोग किया था। आपका स्रोत खुद कहता है ... " आप उपयोगकर्ताओं को Google से साइन आउट किए बिना अपने ऐप से साइन आउट करने में सक्षम कर सकते हैं ... "
रोशन पिटिगला

@RoshanaPitigala ने निर्दिष्ट करने के लिए उत्तर अपडेट किया। यह उत्तर प्रश्न के शीर्षक का उत्तर है, लेकिन एक बार जब आप प्रश्न को अधिक विवरण में पढ़ लेते हैं तो आप समझते हैं कि शीर्षक गलत लिखा गया था। यह उत्तर किसी के लिए भी काम करता है जिसने प्रश्न के शीर्षक के अनुसार इसे यहां बनाया है।
कैमहार्ट

1

औएथ सिर्फ Google उदाहरण को शून्य बनाता है, इसलिए यह आपको Google से बाहर कर देता है। अब है कि आर्किटेक्चर कैसे बनाया जाता है। Google से लॉग आउट करना, यदि आप अपने ऐप का लॉगआउट एक गंदा काम करते हैं, लेकिन आवश्यकता होने पर मदद नहीं कर सकते हैं। इसलिए अपने साइनऑउट () फ़ंक्शन में निम्न जोड़ें। मेरी परियोजना एक कोणीय 6 ऐप थी:

document.location.href = " https://www.google.com/accounts/Logout?continue=https://appengine.google.com/_ah/logout?continue=http://localhost:4200 ";

यहां लोकलहोस्ट: 4200 मेरे ऐप का यूआरएल है। अगर आपका लॉगिन पेज xyz.com है तो इनपुट करें कि


1

यह कोड साइन आउट करने के लिए काम करेगा

    <script>
      function signOut() 
      {
        var auth2 = gapi.auth2.getAuthInstance();
        auth2.signOut().then(function () {   
        console.log('User signed out.');   
        auth2.disconnect();   
      }); 
        auth2.disconnect();
      } 
    </script>

1

केवल ऐप से लॉगआउट करने के लिए लेकिन जीमेल नहीं:

window.gapi.load('auth2', () => {
      window.gapi.auth2
        .init({
          client_id:
            '<Your client id configired on google console>'
        })
        .then(() => {
          window.gapi.auth2
            .getAuthInstance()
            .signOut()
            .then(function() {
              console.log('User signed out.');
            });
        });
    });

मैं अपने ReactJs कोड में ऊपर का उपयोग कर रहा हूं।


0

मुझे उम्मीद है कि हम सत्र में टोकन जमा करते हुए इसे प्राप्त कर सकते हैं और जब वह लॉगआउट पर क्लिक करता है तो टोकन तक पहुंच सकता है।

    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);

0

ऐसा लगता है कि Google ने हाल ही में अपने रिवोक सामान के साथ कुछ तोड़ दिया है (यह हमारे लिए 400 त्रुटियों को वापस करना शुरू कर दिया है)। अब आपको कॉल करना है

auth2.disconnect ();

हमारे मामले में हमें फिर डिस्कनेक्ट कॉल को पूरा करने के लिए कुछ सेकंड इंतजार करना होगा अन्यथा साइन-इन कोड फिर से अधिकृत होने से पहले ही हो जाएगा। यह अच्छा होगा यदि Google डिस्कनेक्ट विधि से एक वादा लौटाए।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.