আপনি যদি কেবলমাত্র নিজের ওয়েব অ্যাপ্লিকেশনটির জন্য গুগল ব্যবহারকারী আইডি, নাম এবং ছবি আনতে চান - তবে 2020 সালের জন্য আমার খাঁটি পিএইচপি পরিষেবা সাইড সলিউশনটি কোনও বাহ্যিক লাইব্রেরি ব্যবহার না করেই এখানে দেওয়া হয়েছে -
আপনি যদি গুগলের ওয়েব সার্ভার অ্যাপ্লিকেশন গাইডের জন্য ওআউথ ২.০ ব্যবহার করেন (এবং সাবধান, গুগল তার নিজস্ব ডকুমেন্টেশনের লিঙ্কগুলি পরিবর্তন করতে পছন্দ করে), তবে আপনাকে কেবল ২ টি পদক্ষেপ করতে হবে:
- আপনার ওয়েব অ্যাপ্লিকেশনের সাথে তার নামটি ভাগ করে নেওয়ার সম্মতি চেয়ে ভিজিটরকে একটি ওয়েব পৃষ্ঠা উপস্থাপন করুন
- তারপরে উপরের ওয়েব পৃষ্ঠায় পাস করা "কোড" আপনার ওয়েব অ্যাপ্লিকেশনটিতে নিয়ে যান এবং গুগল থেকে একটি টোকেন (আসলে 2) আনুন।
প্রত্যাবর্তিত টোকেনগুলির মধ্যে একটিকে "আইডি_ টোকেন" বলা হয় এবং এতে ব্যবহারকারীর আইডি, নাম এবং দর্শনার্থীর ফটো থাকে।
আমার দ্বারা একটি ওয়েব গেমের পিএইচপি কোড এখানে । প্রথমদিকে আমি জাভাস্ক্রিপ্ট এসডিকে ব্যবহার করছিলাম তবে আমি লক্ষ্য করেছি যে নকল ব্যবহারকারীর ডেটা কেবলমাত্র আমার ক্লায়েন্ট সাইড এসডিকে (বিশেষত ব্যবহারকারীর আইডি, যা আমার গেমের জন্য গুরুত্বপূর্ণ) ব্যবহার করার সময় আমার ওয়েব গেমটিতে পাঠানো যেতে পারে, তাই আমি ব্যবহারটি স্যুইচ করেছি সার্ভার দিকে পিএইচপি:
<?php
const APP_ID = '1234567890-abcdefghijklmnop.apps.googleusercontent.com';
const APP_SECRET = 'abcdefghijklmnopq';
const REDIRECT_URI = 'https://the/url/of/this/PHP/script/';
const LOCATION = 'Location: https://accounts.google.com/o/oauth2/v2/auth?';
const TOKEN_URL = 'https://oauth2.googleapis.com/token';
const ERROR = 'error';
const CODE = 'code';
const STATE = 'state';
const ID_TOKEN = 'id_token';
# use a "random" string based on the current date as protection against CSRF
$CSRF_PROTECTION = md5(date('m.d.y'));
if (isset($_REQUEST[ERROR]) && $_REQUEST[ERROR]) {
exit($_REQUEST[ERROR]);
}
if (isset($_REQUEST[CODE]) && $_REQUEST[CODE] && $CSRF_PROTECTION == $_REQUEST[STATE]) {
$tokenRequest = [
'code' => $_REQUEST[CODE],
'client_id' => APP_ID,
'client_secret' => APP_SECRET,
'redirect_uri' => REDIRECT_URI,
'grant_type' => 'authorization_code',
];
$postContext = stream_context_create([
'http' => [
'header' => "Content-type: application/x-www-form-urlencoded\r\n",
'method' => 'POST',
'content' => http_build_query($tokenRequest)
]
]);
# Step #2: send POST request to token URL and decode the returned JWT id_token
$tokenResult = json_decode(file_get_contents(TOKEN_URL, false, $postContext), true);
error_log(print_r($tokenResult, true));
$id_token = $tokenResult[ID_TOKEN];
# Beware - the following code does not verify the JWT signature!
$userResult = json_decode(base64_decode(str_replace('_', '/', str_replace('-', '+', explode('.', $id_token)[1]))), true);
$user_id = $userResult['sub'];
$given_name = $userResult['given_name'];
$family_name = $userResult['family_name'];
$photo = $userResult['picture'];
if ($user_id != NULL && $given_name != NULL) {
# print your web app or game here, based on $user_id etc.
exit();
}
}
$userConsent = [
'client_id' => APP_ID,
'redirect_uri' => REDIRECT_URI,
'response_type' => 'code',
'scope' => 'profile',
'state' => $CSRF_PROTECTION,
];
# Step #1: redirect user to a the Google page asking for user consent
header(LOCATION . http_build_query($userConsent));
?>
আপনি JWT স্বাক্ষর যাচাই করে অতিরিক্ত সুরক্ষা যুক্ত করতে পিএইচপি লাইব্রেরি ব্যবহার করতে পারেন। আমার উদ্দেশ্যে এটি অপ্রয়োজনীয় ছিল, কারণ আমি বিশ্বাস করি যে জাল ভিজিটর ডেটা পাঠিয়ে গুগল আমার ছোট ওয়েব গেমটিকে বিশ্বাসঘাতকতা করবে না।
এছাড়াও, আপনি যদি দর্শকের আরও ব্যক্তিগত ডেটা পেতে চান, তবে আপনার তৃতীয় পদক্ষেপের প্রয়োজন:
const USER_INFO = 'https://www.googleapis.com/oauth2/v3/userinfo?access_token=';
const ACCESS_TOKEN = 'access_token';
# Step #3: send GET request to user info URL
$access_token = $tokenResult[ACCESS_TOKEN];
$userResult = json_decode(file_get_contents(USER_INFO . $access_token), true);
অথবা আপনি ব্যবহারকারীর পক্ষ থেকে আরও অনুমতি পেতে পারেন - গুগল এপিআইএস ডকটির জন্য OAuth 2.0 স্কোপে দীর্ঘ তালিকাটি দেখুন ।
অবশেষে, আমার কোডে ব্যবহৃত APP_ID এবং APP_SECRET ধ্রুবক - আপনি এটি Google API কনসোল থেকে পান :