ورود و عضویت کاربران در سایت با استفاده از گوگل اکانت در PHP

Login Google Using PHP

0 341

در این مقاله یادخواهید گرفت که چگونه می توانید به کاربران خود اجازه دهید با حساب گوگل با استفاده Google PHP Client نسخه 2 به سایت پی‌ اچ‌ پی تان وارد شوند. فرض بر این است که شما از قبل composer را نصب کرده اید و در حال استفاده php نسخه بالاتر از 5.4 هستید. برای مشاهده کل کد، لطفا به این قسمت مراجعه کنید.

ایجاد OAuth 2.0 Client ID و Secret Key

برای شروع به Client ID و Client Secret نیاز داریم. برای این کار باید یک پروژه در Google API console ایجاد کنیم. مراحل گام به گام را دنبال کنید.

  • به Google API Console بروید.
  • بروی سایدبار Projects در بالا سمت چپ کلیک کنید.

سایدبار Projects

  • در پنجره باز شده در بالا سمت راست بر روی “NEW PROJECT” کلیک کنید.

NEW PROJECT

  • بر روی “Create” کلیک کنید.

Create - لاگین در سایت با گوگل

  • در نوار کناری سمت چپ “Credentials” را انتخاب کنید.

Credentials - لاگین در سایت با گوگل

  • “OAuth consent screen” را کلیک نمائید.

OAuth consent screen - لاگین در سایت با گوگل

  • در “Application name” نام را وارد کنید.
  • در “Support email” آدرس gmail فعلی‌ تان را وارد کنید.
  • همچنین می‌ توانید از آدرس ایمیل های دیگر استفاده کنید.
  • در “Authorized domains” دامنه مورد استفاده خود را وارد کنید.
  • اگرمی‌ خواهید بصورت محلی تست کنید می‌ توانید lvh.me را که همان localhost است وارد کنید.
    فیلدهای دیگر را می‌توانید خالی بگذارید.
  • روی ذخیره کلیک کنید
  • سپس در برگه “Credentials” روی “Create credentials” و سپس “OAuth client ID” کلیک کنید.
  • سپس “Web application” را انتخاب کنید.

Web application - لاگین در سایت با گوگل

  • یک نام را در “Name” وارد کنید.
  • هر آدرسی در “Authorized redirect URIs” مشخص شده باشد، گوگل با برخی از داده های تأیید اعتبار، کاربر را به این آدرس هدایت می کند. بنابراین اگر این کار را به صورت محلی انجام می دهید، می توانید http://lvh.me/login.php را مشخص کنید. ما به زودی اسکریپت login.php را ایجاد می کنیم.

به راحتی بر “Create” کلیک کنید تا آدرس دامنه خود را جایگزین کنید.
در مدول نمایش داده شده، Client ID و Client Secret را یادداشت کنید. ما به اسکریپت ورود به سیستم نیاز داریم.

کتابخانه Google Client

گوگل كتابخانه پی‌ اچ‌ پی ای را ارائه داده كه توابع بسیاری را برای تعامل با API های Google با استفاده از OAuth2 فراهم كرده است. بیایید جلوتر برویم و آن را نصب کنیم.

فرض بر این است که ریشه پروژه شما در var/www/html قرار دارد.

ایجاد اسکریپت ورود

یک فایل login.php ایجاد کنید.
فایل vendor/autoload.php را include کنید تا بتوانیم کتابخانه گوگل را که با استفاده از Composer نصب کردیم اضافه کنیم.

اکنون بیایید برخی ثابت ها را برای Google Client ID و Google Client Secret تعریف کنیم.

قسمت GOOGLE_REDIRECT_URL آدرس فعلی اسکریپت login.php است.
به راحتی آدرس دامنه خود را جایگزین کنید.

اکنون بیایید نمونه جدیدی از Google client ایجاد کنیم.

ورود به سیستم گوگل، کاربر را با کد درخواست رشته ای هدایت می کند. برای تولید OAuth2 به این نیاز خواهیم داشت.

هر وقت کد رشته ای در رشته پرس و جو داریم کد آن را واکشی و یک جلسه را تنظیم می کنیم. اگر Session تنظیم شود، فرض خواهیم کرد که کاربر وارد سیستم شده است. اگر نه، آدرس اینترنتی ورود به سیستم را به او نشان می دهیم.

لطفاً توجه داشته باشید که ما به همه موارد خطا رسیدگی نکرده ایم. مثلاً اگر در متن پرس و جو کد هر مقدار نامعتبری دریافت شود، در اسکریپت فعلی باید به آن رسیدگی شود.

خطای {Error – Cannot handle token prior to {date

معمولاً کد فوق به خوبی کار می کند اما اگر ساعت سرور برنامه و ساعت سرور auth شما همگام نباشند، ممکن است پیامی شبیه این در مرورگر برای شما نمایش داده شود:

Cannot handle token prior to 2019-05-02T13:01:09-0800

این خطا هنگام ورود کاربر به حساب google خود ظاهر می شود و به برنامه شما هدایت می شود.
این امر در stackoverflow گزارش شده و ظاهراً این مشکل رفع شده است. اما اگر زمان سرور شما از همگام سازی خارج شده است (منطقه زمانی دیگری را هم تنظیم کنید)، ممکن است باز هم با این مشکل روبرو شوید.
در زیر راه حل این مسئله آورده شده است. بر خلاف راه حل های ذکر شده در انجمن های فوق، ما نمی خواهیم هیچ تماسی با پرونده ای در vendor (ایجاد شده توسط composer) داشته باشیم.

در کد بالا، بجای خط زیر:

سطرهای زیر جایگزین کنید:

بارگیری کل کد لاگین در سایت با گوگل با استفاده از پی‌ اچ‌ پی

برای بارگیری کامل کد لاگین در سایت با گوگل لطفاً به این gist مراجعه کنید.


منبع: سایت Perials

ارسال نظر

توجه:‌ آدرس ایمیل شما منتشر نخواهد شد.

mezitli escort
mezitli escort
mezitli escort