در این آموزش می خوایم یکی از ماژول های خوب برای مدیریت کاربران را معرفی و استفاده کنیم.
برای نصب dectrium-user ابتدا باید کد زیر را در کامپوزر نصب کنید .
composer require "dektrium/yii2-user:0.9.*@dev"
یا می تونین کد زیر را در کامپوزر وارد نمایید و سپس کامپوزر خود را آپدیت کنین
"require": { "php": ">=5.4.0", "yiisoft/yii2": ">=2.0.6", "yiisoft/yii2-bootstrap": "*", "yiisoft/yii2-swiftmailer": "*", "kop/yii2-scroll-pager": "dev-master", "mohammad-mahdy/yii2-jdate": "*", "kartik-v/yii2-widget-rating": "*", "۲amigos/yii2-ckeditor-widget": "*", "dektrium/yii2-user": "0.9.*@dev", "dektrium/yii2-rbac":"1.0.0-alpha@dev" },
پس از نصب باید در فولدر vendor فولدر dektrium ایجاد بشه که داخلش فولدر yii2-user وجود داره.
مرحله بعدی اینه که جداولی که برای مدیریتکاربران این ماژول ایجاد می کند را ایجاد کنید
برای ایجاد کد زیر را در cmd کامپوزر اجرا کنید.
php yii migrate/up --migrationPath=@vendor/dektrium/yii2-user/migrations
توجه داشته باشین که جدول user نباید داخل دیتابیس وجود داشته باشه . اگه وجود داشته باشه migration ارور میده و جداول ایجاد نمیشود .
پس از اجرا باید توی cmd همچین نتیجه را ببینید
$ php yii migrate/up --migrationPath=@vendor/dektrium/yii2-user/migrations Yii Migration Tool (based on Yii v2.0.6) Total 4 new migrations to be applied: m141222_110026_update_ip_field m141222_135246_alter_username_length m150614_103145_update_social_account_table m150623_212711_fix_username_notnull Apply the above migrations? (yes|no) [no]:yes *** applying m141222_110026_update_ip_field > alter column registration_ip in table {{%user}} to string(45) ... done (time: 0.009s) *** applied m141222_110026_update_ip_field (time: 0.030s) *** applying m141222_135246_alter_username_length > alter column username in table {{%user}} to string(255) ... done (time: 0.010s) *** applied m141222_135246_alter_username_length (time: 0.012s) *** applying m150614_103145_update_social_account_table > add column code string(32) to table {{%social_account}} ... done (time: 0.008s) > add column created_at integer to table {{%social_account}} ... done (time: 0.009s) > add column email string to table {{%social_account}} ... done (time: 0.008s) > add column username string to table {{%social_account}} ... done (time: 0.009s) > create unique index account_unique_code on {{%social_account}} (code) ... done (time: 0.016s) *** applied m150614_103145_update_social_account_table (time: 0.059s) *** applying m150623_212711_fix_username_notnull > alter column username in table {{%user}} to string(255) NOT NULL ... done (time: 0.009s) *** applied m150623_212711_fix_username_notnull (time: 0.011s) Migrated up successfully.
خوب مرحله ی بعد اینه که ماژول را توی تنظیمات صدا بزنیم:
اگر از basic استفاده میکنید کد زیر را در comfig/web.php و اگر از advance استفاده می کنید در common/config/main.php
'modules' => [ 'user' => [ 'class' => 'dektrium\user\Module', ], ],
همچنین باید مشخص کنید که مدیریت چ کسی است تا بتواند مدیریت کاربران را انجام دهد
که در basic کد زیر را به کد بالا اضافه می کنیم
'modules' => [ 'user' => [ 'class' => 'dektrium\user\Module', 'admins' => ['amirajlo'] ], ],
خوب اگر از advance استفاده می کنید برای مدیریت بهتر تنظیمات خود را برای frontendو backend انجام می دهیم
در frontend/config/main.php
'modules' => [ 'user' => [ // following line will restrict access to admin controller from frontend application 'as frontend' => 'dektrium\user\filters\FrontendFilter', ], ],
در backend/config/main.php
'modules' => [ 'user' => [ // following line will restrict access to profile, recovery, registration and settings controllers from backend 'as backend' => 'dektrium\user\filters\BackendFilter', 'admins' => ['amirajlo'] ], ],
نکته این که هنگام نصب با توجه به این که بر روی php من php_intl.dll
نصب نبود سیستم پیام خطا داد. که وقتی نصب کردم اوکی شد
تا اینجا مدیریت کاربران ما فراهم شد.
جهت رسیدن به صفحات به صورت زیر عمل می کنیم
در backend برای دسترسی به مدیریت کاربران backend/user/admin/index
و در frontend
ثبت نام frontend/user/register
لاگین frontend/user/login
پروفایلfrontend/user/profile/show?id=1
,..
اطلاعات بیشتر در سایت خود ماژول :dektrium
خوب تا اینجا مدیریت کاربران انجام شده . یکی دیگه از امکانات این ماژول استفاده از social network هست
به این معنی که می توانید از طریق شبکه های اجتماعی نظیر google+و facebook در سایت ثبت نام کنید
برای انجام این ویژگی ما به googl+ بسنده میکنیم و اینو انجام میدیم
اما برای اطلاعات بیشتر به آدرس خود ماژول مراجعه نمایید
Authentication via social networks
ابتدا باید با استفاده از اکانت جی میل api ثبت کنید
۱٫به لینک زیر بروید
https://console.developers.google.com/project
۲٫یک پروژه ایجاد کنید
۳٫سمت چپ تصویر منویapi را انتخاب کنید و سپس google+ سرچ کنین
۴٫
enable Api را انتخاب کنید
۵٫مرحله ی بعدی ایجاد Credentials می باشد .
۶٫ بر روی دکمه آبی کلیک کنیدو گزینه ی OAuth 2.0 client ID را انتخاب نمایید
۷٫ و اطلاعات خواسته شده را پر نمایید
۸٫پس از ذخیره کردن از شما می خواهد نوع آن را مشخص نمایید که web application را انتخاب می کنیم
۹٫در این مرحله تنظیمات اصلی شامل دو گزینه است
اولی Authorized JavaScript origins
که باید آدرس سایت را بدهید به این صورت
http://localhost:8888 یا مثلا http://google.com
دومیAuthorized redirect URIs
که مسیر لاگین سایت به وسیله google api هست
http://localhost:8888/user/security/auth?authclient=google یا
http://google.com/user/security/auth?authclient=google
در آخر به شما client id و client secret تولید شده را نمایش می دهد .
خوب برای استفاده از این امکان basic بconfig/web.php و در advance در common/config/main.php
در قسمت component کد زیر را وارد کنید
'authClientCollection' => [ 'class' => \yii\authclient\Collection::className(), 'clients' => [ 'google' => [ 'class' => 'dektrium\user\clients\Google', 'clientId' => '889147023194-p930c275h1q8vdq11qvepe78gsdtj23k.apps.googleusercontent.com', 'clientSecret' => 'bOkNGmysM3TwEcYUQRtnpQKx', ], ], ],
client secret و clientId ای که پس از مراحل بالا به دست آوردید.
خوب ماحل به پایان رسید به منوی ورود به سایت رفته و از طریق اکانت گوگل خود وارد سایت شوید
نکته :
برای تنظیم api در گوگل من از سایت های زیر استفاده کردم :
https://code.tutsplus.com/tutorials/how-to-program-with-yii2-google-authentication–cms-24987
https://developers.google.com/identity/sign-in/web/devconsole-project