رتبه موضوع:
  • 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
آموزش Authentication در لاراول 5
#1
پیاده سازی احراز هویت در لاراول بسیار ساده ساده است. تنظیمات مربوط به احرازهویت در پوشه config و فایل auth.php قرار دارد. در این فایل می توانید درایور را eloquent تعیین کنید و کلاس مدلی که به جدول کاربران دسترسی دارد را مشخص کنید و همچنین در بخش table نام جدولی که اطلاعات کاربران در ان ذخیره می شود را مشخص کنید.

به طور پیش فرض در پوشه app یک مدل به نام User وجود دارد که با استفاده از eloquent لاراول یک سیستم احرازهویت را پیاده سازی کرده است که شما می توانید از آن استفاده کنید. در مسیر app/Http/Controllers/Auth دوکنترلر برای استفاده در سیستم احرازهویت استفاده می شوند که AuthController برای ایجاد کاربر جدید یا لاگین کردن و PasswordController برای ریست کردن کلمه عبور کاربرانی که آن را فراموش کرده اند به کار می رود. تمام view های مربوطه هم در پوشه resources/views/auth قرار دارند و شما می توانید آنها را به دلخواه خودتان ویرایش کنید.
همچنین اگر نیاز دارید تغییراتی در فرم ثبت نام کاربر جدید بدهید کافی است در مسیر App\Services در فایل Registrar.php تغییرات موردنظر را اعمال کنید. در متد validator می توانید قوانین اعتبارسنجی فیلدها و در متد create نیز مقادیر فیلدهارا در دیتابیس و جدول users درج کنید. شما به راحتی می توانید از این سیستم احراز هویت پیش فرض لاراول استفاده کنید.


نکته : اگر خودتان می خواهید یک migration و یا schema درست کنید و فیلدهای جدول یوزر رو بسازید حتما یادتون باشه که فیلد پسورد باید حداقل 60 کاراکتر باشه و فیلد دیگری به نام remember_token به صورت string و قابلیت نال بودن و همچنین طول 100 کاراکتر برای بازیابی رمز فراموش شده کاربران درست نمایید.
کد پی‌اچ‌پی:
$table->rememberToken(); 



خود لاراول یک middleware به نام Authenticate ایجاد کرده که در متد handle آن ابتدا بررسی میکند آیا کاربر لاگین کرده یا خیر و در غیر اینصورت آن را به صفحه login هدایت میکند. شما با استفاده از این middleware در سازنده کلاس کنترلری که میخواهید فقط کاربران احرازهویت شده دسترسی داشته باشند به صورت زیر عمل کنیم. به طور مثال در کلاس کنترلر HomeController به همین صورت عمل شده است :

کد پی‌اچ‌پی:
public function __construct()
{
 
   $this->middleware('auth');



در صورتی که نمیخواهید از این سیستم احرازهویت تهیه شده توسط لاراول استفاده کنید نگران نباشید. خودتان هم می توانید به سادگی آن را پیاده سازی کنید.

برای اینکار باید کلاس Auth را به کنترلر ایمپورت کنید و سپس با استفاده از متد attempt به عنوان پارامتر یک آرایه دریافت می کند و کلیدهای این آرایه نام ستون های موردنظر در دیتابیس و جدول users و مقادیر آن هم مقداروارد شده توسط کاربر است صحت اطلاعات کاربر را بررسی کنید. متد attempt در صورتی که احراز هویت با موفقیت انجام شود true وگرنه false برمیگرداند.


کد پی‌اچ‌پی:
<?php namespace App\Http\Controllers;
 
use 
Auth;
use 
Illuminate\Routing\Controller;
 
class 
AuthController extends Controller {
 
 
   /**
     * Handle an authentication attempt.
     *
     * @return Response
     */
 
   public function authenticate()
 
   {
 
       if (Auth::attempt(['email' => $email'password' => $password]))
 
       {
 
           return redirect()->intended('dashboard');
 
       }
 
   }
 



همچنین می توانیم در متد attempt اطلاعات بیشتری را بررسی کنیم.مثلا در مثال زیر علاوه بر ایمیل و کلمه عبور باید کاربر فیلد تایید آن در دیتابیس هم ۱ باشد :


کد پی‌اچ‌پی:
if (Auth::attempt(['email' => $email'password' => $password'active' => 1]))
{
 
   // The user is active, not suspended, and exists.



در هر قسمت از برنامه هم که نیاز دارید بررسی کنید کاربر جاری احراز هویت شده است یا خیر کافی است از متد check اینکار را انجام دهید :


کد پی‌اچ‌پی:
if (Auth::check())
{
 
   // The user is logged in...



برای logout کردن از برنامه هم از متد logout استفاده میکنیم :


کد پی‌اچ‌پی:
Auth::logout(); 


بعداز اینکه کاربر احرازهویت شد به راحتی با استفاده از متد user میتوانید یک آبجکت از کاربر جاری ایجاد کنید :


کد پی‌اچ‌پی:
$user Auth::user();
 echo 
$user->name


در مثال همانطور که مشاهده کردید به راحتی توانستم به نام کاربر دسترسی داشته و آن را چاپ کنم.


در کنترلر به این صورت هم می توان به روش های زیر یک آبجکت از کاربر ایجاد کنیم :


کد پی‌اچ‌پی:
public function updateProfile(Request $request)
 
   {
 
       if ($request->user())
 
       {
 
           // $request->user() returns an instance of the authenticated user...
 
       }
 
   }
//×××××××××××××××××××××××××  ××××××××××××××××××××××
public function updateProfile(Authenticatable $user)
 
   {
 
       // $user is an instance of the authenticated user...
 
   


برای مسیرها هم می توانیم middleware احرازهویت را تعریف کنیم تا دسترسی به مسیر فقط برای کاربران احرازهویت شده میسر باشد.


کد پی‌اچ‌پی:
Route::get('profile', ['middleware' => 'auth''uses' => 'ProfileController@show']); 

Authentication یه کاربر خاص :

شما می توانید یک کاربر خاص رو از طریق تابع loginUsingId و داشتن آی دی اون کاربر لاگین نمیایید.
کد پی‌اچ‌پی:
Auth::loginUsingId(1); 

اعتبار سنجی کاربر بدون عمل لاگین :

می توانید چک کنید که آیا کاربری با مشخصات فرستاده شده دارای اعتبار هست یا خیر و این کار بدون لاگین کردن کاربر صورت می گیرد.
کد پی‌اچ‌پی:
if (Auth::validate($credentials))
{
 
   //


لاگین کردن کاربر فقط برای یک درخواست :

می توانیم عمل لاگین کردن را فقط برای یک درخواست انجام دهیم. وقتی به درخواست مورد نظر پاسخ داده شد کاربر به صورت اتوماتیک Logout می شود.در این روش هیچ sessions و cookies ذخیره نمی شود.
کد پی‌اچ‌پی:
if (Auth::once($credentials))
{
 
   //


Authentication Events

در مورد event ها دو مورد مهم هست. 
وقتی شما از متد attempt استفاده می کنید و آن را صدا می زنید event ای به نام auth.attempt رخ خواهد داد و وقتی  authentication با موفقیت انجام بشه و کاربر لاگین کنه event ای به نام auth.login رخ خواهد داد.



(با تشکر از حامد آریان)
قوانین انجمن لاراولیستا  | شماره تماس :‌09124783045 |‌ تلگرام :‌ 09377869283 |‌ مدیریت کانال تلگرام
پاسخ
 


موضوعات مشابه ...
موضوع نویسنده پاسخ بازدید آخرین ارسال
  گرفتن آپدیت های وب هوک تلگرام در لاراول Mr.AMiR 6 156 09-19-2017, 04:30 AM
آخرین ارسال: Bvk.Programmer
  خطای نصب لاراول dmbehrouz 0 25 09-07-2017, 01:11 PM
آخرین ارسال: dmbehrouz
  مشکل افت سرعت وقتی از لاراول به جای php استفاده می کنم Zahir 1 79 08-31-2017, 08:40 AM
آخرین ارسال: imanghafoori
  آموزش اعتبار سنجی در لاراول 5 alihossein 5 1,183 07-30-2017, 08:47 AM
آخرین ارسال: shima71
  آموزش فارسی لاراول ۵ alihossein 7 3,680 07-28-2017, 06:44 PM
آخرین ارسال: shima71
  انتقال سایت mvc به لاراول miladhassan 1 71 07-26-2017, 09:01 AM
آخرین ارسال: fery
Question راه اندازی لاراول روی سیستم افلاین؟ fery 0 42 07-26-2017, 08:55 AM
آخرین ارسال: fery
Sad مشکل در ایجاد وبلاگ در لاراول 5.4 itroz 0 80 07-05-2017, 05:03 PM
آخرین ارسال: itroz
  بهترین پکیج acl برای لاراول چیست homeily@gmail.com 3 275 05-08-2017, 09:27 AM
آخرین ارسال: Geppeto
  لینک فایل های css و js در لاراول saeed.rahgooy@gmail.com 1 97 05-01-2017, 07:50 PM
آخرین ارسال: zootech

پرش به انجمن:


کاربران در حال بازدید این موضوع: 1 مهمان

درباره انجمن فریم ورک لاراول

انجمن لاراولیستا به عشق توسعه دهنده ها و علاقمندان به این فریم ورک محبوب ایجاد شده و امیدواریم با نظرات خوبتون ما رو در بهبود کار یاری کنید. در ضمن خیلی هم خوشحال میشیم شما هم در توسعه این انجمن سهمی داشته باشید.