গুগলে লগইন করতে আমি যেখানে OAuth2 ব্যবহার করেছি সেখানে কীভাবে কোনও অ্যাপ্লিকেশনটির লগআউট করবেন?


86

আমার অ্যাপ্লিকেশনটিতে, আমি জাসাপি ব্যবহার করে গুগল সাইনআউট প্রয়োগ করেছি।

আমি গুগল সাথে সংযোগ করতে https://www.googleapis.com/oauth2/v1/tokeninfo?access_token=xxxxxx url ব্যবহার করেছি এবং তারপরে ব্যবহারকারীর ডেটা পেতে https://www.googleapis.com/plus/v1/people/xxxxxx গুগল প্রোফাইল থেকে

এখন আমার অ্যাপ্লিকেশন থেকে একটি বোতাম ক্লিক করার সময় আমাকে গুগল থেকে সাইন আউট করতে হবে। আমি এটি জাভাস্ক্রিপ্টে কীভাবে বাস্তবায়ন করতে পারি, বা কমপক্ষে এটি অবশ্যই প্রত্যেকবার ব্যবহারকারীদের সাইন ইন করার জন্য গুগল লগইন পৃষ্ঠা জিজ্ঞাসা করতে হবে।

আমি চেষ্টা করেছি approval_prompt=force, তবে কাজ করছে বলে মনে হচ্ছে না।

উত্তর:


247

ওআউথের সংক্ষিপ্ত বিবরণ: তিনি / তিনি যে ব্যবহারকারী বলেছেন তিনি কি সে ?:

আমি নিশ্চিত নই যে আপনি "গুগল উইথ লগইন" বিকল্পের মতো স্ট্যাক ওভারফ্লোতে লগইন করতে OAuth ব্যবহার করেছিলেন, তবে আপনি যখন এই বৈশিষ্ট্যটি ব্যবহার করেন, তখন স্ট্যাক ওভারফ্লো গুগলকে জিজ্ঞাসা করছে আপনি জানেন যে এটি:

"ইয়ো গুগল, এই ভিণেশ ফেল্লা দাবি করেছেন যে vinesh.e@gmail.com তিনিই, এটাই কি সত্য?"

আপনি যদি ইতিমধ্যে লগ ইন হয়ে থাকেন তবে গুগল হ্যাঁ বলবে। তা না হলে গুগল বলবে:

"এক সেকেন্ড স্ট্যাক ওভারফ্লোতে থাকুন, আমি এই ফেলাটিকে প্রমাণীকরণ করব এবং যদি সে তার গুগল অ্যাকাউন্টের জন্য সঠিক পাসওয়ার্ডটি প্রবেশ করতে পারে তবে এটিই তার"।

আপনি যখন নিজের গুগল পাসওয়ার্ড প্রবেশ করেন, তখন গুগল স্ট্যাক ওভারফ্লোকে বলে যে আপনি কে আপনি যাকে বলে এবং স্ট্যাক ওভারফ্লো আপনাকে লগ ইন করে।

আপনি যখন আপনার অ্যাপ্লিকেশনটি লগআউট করেন, আপনি আপনার অ্যাপ্লিকেশন থেকে লগ আউট করেন :

এখানে যেখানে ওআউথের নতুন বিকাশকারীরা কখনও কখনও কিছুটা বিভ্রান্ত হন ... গুগল এবং স্ট্যাক ওভারফ্লো, এসেম্বলা, ভিনেশের খুব শীতল-স্লিক-ওয়েব অ্যাপ্লিকেশন, সমস্ত আলাদা আলাদা সত্ত্বা এবং গুগল বিনেশের শীতল ওয়েবঅ্যাপে আপনার অ্যাকাউন্ট সম্পর্কে কিছুই জানে না, এবং ভাইস বিপরীতে, আপনি প্রোফাইল তথ্য অ্যাক্সেস করতে ব্যবহার করছেন এমন API এর মাধ্যমে যা উন্মোচিত হয়েছে তা বাদ দিয়ে।

যখন আপনার ব্যবহারকারী লগ আউট করেন, তিনি বা সে গুগল থেকে লগ আউট করে না, সে আপনার অ্যাপ্লিকেশন, বা স্ট্যাক ওভারফ্লো, বা এসেম্বলা, বা যে কোনও ওয়েব অ্যাপ্লিকেশন ব্যবহারকারীকে প্রমাণীকরণের জন্য গুগল ওআউথ ব্যবহার করে log

আসলে, আমি আমার সমস্ত গুগল অ্যাকাউন্ট থেকে লগ আউট করতে পারি এবং এখনও স্ট্যাক ওভারফ্লোতে লগইন করতে পারি। একবার আপনার অ্যাপ্লিকেশনটি ব্যবহারকারীটি কে জানতে পারলে সেই ব্যক্তি গুগল থেকে লগ আউট করতে পারে। গুগলের আর দরকার নেই।

এর সাথে, আপনি যা করতে বলছেন তা হ'ল ব্যবহারকারীকে এমন একটি পরিষেবা থেকে লগ আউট করুন যা সত্যিকারের আপনার নয়। এটি সম্পর্কে এটি ভাবুন: একজন ব্যবহারকারী হিসাবে আপনি কীভাবে বিরক্ত হন বলে আমি মনে করি যদি আমি আমার গুগল অ্যাকাউন্টের সাথে 5 টি ভিন্ন পরিষেবাতে লগইন করি, তবে আমি প্রথমবারের মধ্যে একটির বাইরে লগ আউট করেছি, আমাকে আমার জিমেইল অ্যাকাউন্টে লগইন করতে হবে আবার এই অ্যাপ্লিকেশন বিকাশকারী সিদ্ধান্ত নিয়েছিলেন যে, যখন আমি তার অ্যাপ্লিকেশনটি লগ আউট করি তখন আমারও গুগল থেকে লগ আউট করা উচিত? এটি সত্যিই দ্রুত বৃদ্ধ হতে চলেছে। সংক্ষেপে, আপনি সত্যিই এটি করতে চান না ...

হ্যাঁ, যাই হোক না কেন, আমি এখনও গুগল থেকে ব্যবহারকারীকে লগ আউট করতে চাই, আমাকে বলুন আমি কীভাবে এটি করব?

এর সাথে বলা হয়েছে, আপনি যদি এখনও কোনও ব্যবহারকারীকে গুগল থেকে লগ আউট করতে চান এবং বুঝতে পারেন যে আপনি তাদের কার্যপ্রবাহটি খুব ভালভাবে ব্যাহত করতে পারেন তবে আপনি তাদের গুগল পরিষেবাগুলির একটিতে লগআউট বোতাম থেকে গতিশীলভাবে লগআউট ইউআরএল তৈরি করতে পারেন এবং তারপরে এটি ব্যবহার করে আবেদন করতে পারেন একটি আইএমজি উপাদান বা একটি স্ক্রিপ্ট ট্যাগ:

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

আপনি যদি লগআউট পৃষ্ঠায় আপনার ব্যবহারকারীকে পুনর্নির্দেশ করেন বা ক্রস-ডোমেন বিধিনিষেধযুক্ত নয় এমন উপাদান থেকে এটিকে আহ্বান করেন তবে ব্যবহারকারীকে গুগল থেকে লগ আউট করা হবে।

মনে রাখবেন যে এর অর্থ এই নয় যে ব্যবহারকারী আপনার অ্যাপ্লিকেশন থেকে লগ আউট হয়ে যাবে , কেবল গুগল। :)

সারসংক্ষেপ:

আপনার মনে রাখার জন্য গুরুত্বপূর্ণ বিষয়টি হ'ল, আপনি যখন নিজের অ্যাপ্লিকেশনটি লগআউট করেন, তখন আপনাকে ব্যবহারকারীকে একটি পাসওয়ার্ড পুনরায় প্রবেশের প্রয়োজন হয় না। এই হল ব্যপার! এটি গুগলের বিরুদ্ধে প্রমাণীকরণ করে যাতে ব্যবহারকারীর প্রত্যেকটি ওয়েব অ্যাপ্লিকেশনটিতে সে তার ব্যবহারকারীর পাসওয়ার্ড বারবার প্রবেশ করে না। এতে কিছুটা অভ্যস্ত হয়ে ওঠার দরকার পড়ে তবে এটি জেনে রাখুন যে যতক্ষণ না ব্যবহারকারী গুগলে লগইন করবেন ততক্ষণ আপনার অ্যাপ্লিকেশনটিকে সে / সে কী সে ব্যবহারকারী সে কিনা সে সম্পর্কে চিন্তা করার দরকার নেই।

ওআউথের সাথে গুগল প্রোফাইল তথ্য ব্যবহার করে আপনি যেমন করেন তেমন প্রকল্পে আমারও একই বাস্তবায়ন রয়েছে। আপনি যে চেষ্টাটি দেখতে চেয়েছিলেন ঠিক সেই একই জিনিসটি আমি চেষ্টা করেছিলাম এবং বার বার গুগলে লগইন করতে গিয়ে লোকেরা সত্যই তাড়িত করতে শুরু করে, তাই আমরা তাদের গুগল থেকে লগ আউট করা বন্ধ করে দিয়েছিলাম। :)


8
আপনার মূল্যবান সময় এবং এত বড় বিবরণের জন্য আপনাকে ধন্যবাদ। তবে আমার ক্লায়েন্টের আলাদা মতামত রয়েছে। মনে করুন ব্যবহারকারী কোনও পাবলিক সিস্টেম থেকে তার গুগল লগইন ব্যবহার করে অ্যাপ্লিকেশনটিতে লগইন করে এবং অ্যাপ্লিকেশন থেকে লগ আউট করে। তিনি ভাবতে পারেন যে তিনি গুগল থেকে লগ আউট করেছেন তবে বাস্তবে নয়! পরে সিস্টেমটি ব্যবহার করা অন্য যে কোনও ব্যবহারকারী গুগল অ্যাকাউন্টে অ্যাক্সেস পাবেন।
ভিনেশ ইজি

13
তাহলে আপনার ব্যবহারকারীদেরও গুগল থেকে লগ আউট করা দরকার। মুল বক্তব্যটি হ'ল তারা 2 টি পরিষেবাতে লগ ইন করছে। আপনার ব্যবহারকারীদের কীভাবে OAuth ব্যবহার করবেন তা শিখতে হবে। :) আমি আপনার ক্লায়েন্ট এবং ব্যবহারকারীদের শিক্ষিত করার পরামর্শ দেব। যদি আপনার করতে হয় তবে এগিয়ে যান এবং তাদের দেখান। বাস্তবায়ন করতে আর বেশি সময় নেওয়া উচিত নয় এবং পরে যখন আপনি বুঝতে পারবেন যে এটি কতটা সফল হয় তা পূর্বে পূর্বাবস্থায় ফেরা উচিত। :) আমি এটি নিজের জন্য বিশ্বাস করি না যতক্ষণ না আমি আসলে এটি না করি এবং যতক্ষণ না লুপটোডো থেকে লগ আউট করে প্রতিবার গুগলে আবার লগইন করতে হয় তা কতটা পিআইটিএর দেখেনি। একটি বার্তা বিবেচনা করুন "আপনি ভিনেশের দুর্দান্ত অ্যাপ্লিকেশন থেকে লগ আউট করেছেন>> গুগল থেকেও লগ আউট <> ভুলে যাবেন না!"
jmort253

4
@ jmort253 হ্যাঁ আমি বুঝতে পারি যে তাদের আর অনুমতি দেওয়ার দরকার নেই, তবে কীভাবে এগুলি আবার অনুমোদন করব? দয়া করে এই প্রশ্ন আমি করেছি দেখতে (আমি এখনও নতুন OAuth এর থাকি): stackoverflow.com/questions/37515836/...
Apoorv Kansal

4
@ jmort253 তবে, যদি ব্যবহারকারীকে "সংযোগ বিচ্ছিন্ন" শব্দটি অ্যাপ্লিকেশনটির সম্পূর্ণ লগ আউটকে বোঝায় ... কারণ এটি শংসাপত্রগুলি আবার টাইপ না করেই স্বয়ংক্রিয়ভাবে লগ ইন করে, 2 টি সমস্যা আছে; ব্যবহারকারী অবাক হয়ে কী ঘটেছিল যে আমি কেবল সংযোগ বিচ্ছিন্ন করেছি এবং এটিতে আমার তথ্য থাকা উচিত নয় এবং দ্বিতীয় ব্যবহারকারী কোনও আলাদা অ্যাকাউন্টে সাইন ইন করতে সক্ষম হবে না কারণ লেখক সরবরাহকারী জোর-লগইন পদ্ধতি সরবরাহ না করে এটি সর্বদা স্বয়ংক্রিয়ভাবে লগ ইন করবে। সুতরাং এই ক্ষেত্রে, লগআউট আকাঙ্ক্ষিত যাতে এটি কুকিগুলিকে অকার্যকর করতে পারে এবং ক্লায়েন্টের পক্ষে এটি কীভাবে পরিচালিত হয় সে সম্পর্কে আপনাকে আর চিন্তা করতে হবে না।
সাহস

4
এটি ইলেকট্রন অ্যাপ্লিকেশনগুলির জন্য দরকারী, যেখানে ব্যবহারকারী গুগলে লগ ইন করেছেন! এই ক্ষেত্রে, গুগল থেকে তাদের লগ আউট করে কেবলমাত্র একটি অ্যাপ্লিকেশন (ইলেক্ট্রন অ্যাপ) থেকে তাদের লগ ইন করে।
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";
}

4
অবশেষে! ধন্যবাদ! আমি ইমেল বা পাসওয়ার্ড না জেনে কেবলমাত্র একটি ক্লিকের মাধ্যমে পরবর্তী ব্যবহারকারীটিকে লগ আউট করার জন্য, পরবর্তী ব্যবহারকারীকে লগ-ইন করতে বাধা দেওয়ার জন্য, পুরো দিনটির চেষ্টা করছি ...
কিছু

4
এটি কাজ করে না, কারণ এটি একই পৃষ্ঠাটি অন্য ট্যাবে খোলার পক্ষে যথেষ্ট, এবং আপনি আবার লগইন করেছেন ...
বার্তোমিয়েজ সেমাসেকজেক

4
ধন্যবাদ আমি এখন বছরের পর বছর ধরে এটি খুঁজছিলাম।
সাকিব 11

6

আমার জন্য, এটি কাজ করে (জাভা - অ্যান্ড্রয়েড)

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
}

অ্যান্ড্রয়েডের অ্যাসিঙ্কটাস্কে আপনাকে এই ফাংশনটি কল করতে হবে


4
যদিও এটি সত্য যে এটি কাজ করবে, প্রশ্নটি আসলে জাভাস্ক্রিপ্ট সম্পর্কে জিজ্ঞাসা করছে, জাভা নয়।
jmort253

4
এটি নির্লজ্জ শোনায় যে আপনার প্রয়োজন কেবল একটি টোকেন, আপনি গুগলকে জোর করে সবাইকে লগ আউট করতে বাধ্য করতে পারেন।
আর্কিমিডিস ট্রাজানো

এটি আপনাকে ডিভাইস থেকে লগ আউট করবে না, এটি কেবলমাত্র অ্যাপ্লিকেশনটি (অ্যান্ড্রয়েডে) লগ আউট করবে।
ভিনোজ জন হোসান

4
কিছু গুগল oauth2 ডক্সের দিকে তাকানো থেকে একটি সাধারণ অ্যাক্সেস টোকেন এর মত দেখাচ্ছে। "1 / fFAGRNJru1FTz70BzhT3Zg" "1 /" অংশটি ধরে নেওয়া মানুষের পক্ষে সংখ্যাটি সহজতর সনাক্ত করা is আপনার কাছে এখনও দুটি বর্ণমালা (উচ্চ এবং নিম্ন কেস) প্লাস দশটি সংখ্যা রয়েছে যার দৈর্ঘ্য 22 টি অক্ষর। এটি 22 ^ (26 * 2 + 10) যা সমান 1.6990502e + 83। বা জানা মহাবিশ্বে পরমাণুর সংখ্যা সম্পর্কে । শুভকামনা হ'ল এটি এইচটিটিপি-র উপর চাপিয়ে দিয়েছে। ;)
ক্রিস বালোগ

এটি রিফ্রেশ টোকন প্রত্যাহার করে বলে মনে হচ্ছে না, যা কুকিজ অপসারণের আগে চুরি হয়ে যেতে পারে (যদি এটি সেখানে সংরক্ষণ করা থাকে)।
ওন্দ্রেজ গালবাভি

1

আপনি কেবল একটি লগআউট বোতাম তৈরি করতে এবং এটিতে এই লিঙ্কটি যুক্ত করতে পারেন এবং এটি আপনাকে অ্যাপ থেকে লগ আউট করবে এবং আপনার কাঙ্ক্ষিত সাইটে আপনাকে পুনঃনির্দেশিত করবে:

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

আপনার ওয়েবসাইটের সাথে কেবল আপনার নিজের টগল করুন


1

এটি ব্যবহারকারীকে অ্যাপ্লিকেশন থেকে সাইন আউট করতে কাজ করে তবে গুগল নয়।

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

উত্স: https://developers.google.com/identity/sign-in/web/sign-in


4
এটি তার / তার Google অ্যাকাউন্ট থেকে সম্পূর্ণরূপে সাইন আউট করবে না। এটি কেবল এটিই ধ্বংস করে AuthInstanceযা আপনি ব্যবহার করেছিলেন। আপনার উত্স নিজেই বলেছে ... " আপনি গুগল থেকে সাইন আউট না করেই ব্যবহারকারীদের আপনার অ্যাপ থেকে সাইন আউট করতে সক্ষম করতে পারেন ... "
রোশানা পিটিগালা

@ রোশানাপিটিগালা নির্দিষ্ট করে উত্তর আপডেট করেছেন। এই উত্তরটি প্রশ্নের শিরোনামের উত্তর, তবে একবার আপনি আরও বিশদে বিশদটি পড়লে আপনি বুঝতে পারবেন শিরোনামটি ভুলভাবে লেখা হয়েছিল। এই উত্তরটি যে কেউ প্রশ্নের শিরোনাম অনুযায়ী এখানে তৈরি করেছেন তাদের পক্ষে কাজ করে।
ক্যামহার্ট

1

ওউথ গুগলের দৃষ্টান্তকে নਾਲ করে দেয়, অতএব এটি আপনাকে গুগলের বাইরে রাখে। এখন এভাবেই আর্কিটেকচার তৈরি হয়। গুগল থেকে লগ আউট, আপনি যদি নিজের অ্যাপ্লিকেশনটির লগআউট করা একটি নোংরা কাজ, তবে প্রয়োজনীয়তা যদি একই রকম করে তবে সহায়তা করতে পারে না। সুতরাং আপনার সাইনআউট () ফাংশনে নিম্নলিখিতগুলি যুক্ত করুন। আমার প্রকল্পটি একটি কৌনিক 6 অ্যাপ ছিল:

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

এখানে লোকালহোস্ট: 4200 হ'ল আমার অ্যাপ্লিকেশনটির URL। যদি আপনার লগইন পৃষ্ঠাটি 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

Gmail থেকে নয় কেবল অ্যাপ্লিকেশন থেকে লগআউট করতে:

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.');
            });
        });
    });

আমি আমার রিঅ্যাক্টজেস কোডটিতে উপরে ব্যবহার করছি।


0

আমি আশা করি লগ ইন করার সময় টোকেনটি সেশনে সংরক্ষণ করে এবং লগআউট ক্লিক করার সময় টোকেন অ্যাক্সেস করে আমরা এটি অর্জন করতে পারি hope

    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

দেখে মনে হচ্ছে গুগল সম্প্রতি তাদের প্রত্যাহারের স্টাফ দিয়ে কিছু ভেঙেছে (এটি আমাদের জন্য 400 ত্রুটি ফিরিয়ে দেওয়া শুরু করেছে)। আপনাকে এখন ফোন করতে হবে

auth2.disconnect ();

আমাদের ক্ষেত্রে আমাদের সংযোগ বিচ্ছিন্ন হওয়ার জন্য কয়েক সেকেন্ড অপেক্ষা করতে হবে অন্যথায় সাইন-ইন কোডটি সম্পন্ন হওয়ার আগেই পুনরায় অনুমোদন দেবে। গুগল সংযোগ বিচ্ছিন্ন পদ্ধতি থেকে কোন প্রতিশ্রুতি ফিরিয়ে দিলে ভাল হবে।


আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.