سؤال

أنا أستخدم 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 إلى هذا العنوان في بعض الأحيان ، لكنها ستنجح فقط في إعادة توجيه المستخدم عندما يكون الهدف بعض موقع Google ، وليس خاصًا بك. هذا يجعل النهج غير صالح للاستخدام.

علاوة على ذلك ، لا تتضمن المواصفات المفتوحة تسجيل الدخول العالمي في هذه اللحظة.

هناك طريقة أخرى:

اقتراح

قم بتضمين iframe على صفحتك واستخدم معالج أحداث JavaScript Onclick على رابط تسجيل الدخول إلى التحميل 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 (لا أعرف بالتأكيد أي منها ستعمل ، لأنك تعمل عبر الموقع هنا).

انظر أيضا هذه الأسئلة:

OpenID. كيف تنص

كيفية إضافة ميزة تسجيل الخروج إلى موقع OpenID الممكّن؟

لقد كنت أحاول أن أفعل الشيء نفسه. لتطبيقات Google فقط -
لتسجيل الخروج جرب الخيارين التاليين:
1) استخدام I -Frame -

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

كما قضيت ملف تسربت مقدار الوقت على مشكلة تسجيل الدخول/تسجيل الدخول إلى Google لتطبيقي (وهو خادم عقدة/mongoDB ، باستخدام مستندات Google بشكل كبير وبرامج واجهات برمجة تطبيقات Google Script) ، اضطررت إلى مشاركة النتائج الخاصة بي هنا ..

الطريقة الجيدة الوحيدة لتسجيل المستخدم بالكامل هي استخدام هذا:

 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 ثوانٍ لتنفيذ تسجيل الدخول قبل إغلاق المنبثقة. ثم يُطلب من المستخدم تسجيل الدخول مع حساب آخر في تطبيق النافذة الرئيسية.

هذا يؤكد حل floccinaucinihilipilificification وربما يجب أن يكون حل iframe المذكور أعلاه أفضل من لي.

كان علي فقط أن أفعل الشيء نفسه ، تسجيل الدخول للمستخدم. بطريقة ما ، لا تعمل الإجابة المقبولة بالنسبة لي ، لقد حصلت على خطأ من Google

The page you requested is invalid.

لذلك انتهى بي الأمر بوضع هذا في صفحتي:

<img src="https://www.google.com/accounts/Logout" />

الذي ينجح بنجاح في الخروج من المستخدم. مصدر

إليك ما أقوم به ، لا تتذكر ما إذا كنت قد صنعته أو عثرت عليه في مكان ما ... إنه يعمل مثل السحر ... بخلاف حقيقة أنه يسجلك من جميع مواقع 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>

لا أعرف ما إذا كان الشيء الذي فعلته على حق. لكنني تمكنت من استخدام رمز مثل هذا:

<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>
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top