اذهب إلى المحتوى

السؤال

Recommended Posts

  • 1
نشر (معدل)

 

ساحاول تبسيط الشرح علي قدر المستطاع اولا حفظ بيانات مستخدمينا واحد من أهم الأشياء التي نحتاجها في تطوير الويب ، وهذا يمكن أن يوضع تحت مظلة "الأمان". هناك طرق مختلفة لتحقيق ذلك ولاكن بطبع ساشرح بتفاصيل علي حزمة sanctum  
 

ما هو sanctum  ؟
sanctum  هو حزمة بسيطة تستخدم لتنفيذ المصادقة لواجهة برمجة التطبيقات API تم تصميمها لتأمين مسارات واجهة برمجة التطبيقات في تطبيقات لارافيل. sanctum حزمة خفيفة لتثبيتها في المشروع، مما يعني أنه سهل التنفيذ وبسيط.

تثبيت الحزمه والتعرف عليها 
عليك تثبيت الحزمه بواسطة الأمر التالي 
 

composer require laravel/sanctum

ثما عليك تنفيذ الامر التالي لكي تعمل بدون مشاكل

php artisan vendor:publish --provider="Laravel\Sanctum\SanctumServiceProvider"

اخر شئ في تثبيت الحزمه 
 

php artisan migrate

مثال علي استخدام Sanctum
يجب عليك إنشاء وحدة التحكم بهذه الطريقه 
 

php artisan make:controller UserAuthController

كيفية انشاء المصادقه مثل , انشاء الحساب, تسجيل الدخول , تسجيل الخروج

عليك الاتجاه لهذه المسار

routes\api.php


ثم خذه هذه الكود نسخ ثما الصقه بداخل هذه الملف
 

use App\Http\Controllers\AuthController;

Route::post('register',[UserAuthController::class,'register']);
Route::post('login',[UserAuthController::class,'login']);
Route::post('logout',[UserAuthController::class,'logout'])
  ->middleware('auth:sanctum');

 

هذا الكود يوضح كيفية تعريف مسارات (Routes) في إطار عمل Laravel للتعامل مع عمليات المصادقة (Authentication). يتم استخدام Sanctum، لتأمين بعض العمليات.

المسار 'register' يقوم بتنفيذ الدالة 'register' في AuthController عندما يتم إرسال طلب POST إلى 'register'.
المسار 'login' يقوم بتنفيذ الدالة 'login' في AuthController عندما يتم إرسال طلب POST إلى 'login'.
المسار 'logout' يقوم بتنفيذ الدالة 'logout' في AuthController عندما يتم إرسال طلب POST إلى 'logout'. ويتم تطبيق مرشح (Middleware) بإسم 'auth:sanctum' على هذا المسار، وهذا يعني أنه يجب أن يكون المستخدم مصادقاً (مسجلاً الدخول) باستخدام Sanctum قبل أن يتمكن من تنفيذ عملية 'logout'.

إضافة وظيفة انشاء الحساب

انتقل إلى app\http\controllers\UserAuthController وأضف هذه الدوال
 

public function register(Request $request){
    $registerUserData = $request->validate([
        'name'=>'required|string',
        'email'=>'required|string|email|unique:users',
        'password'=>'required|min:8'
    ]);
    $user = User::create([
        'name' => $registerUserData['name'],
        'email' => $registerUserData['email'],
        'password' => Hash::make($registerUserData['password']),
    ]);
    return response()->json([
        'message' => 'User Created ',
    ]);
}

ضع هذه الكود في الملف هذه وظيفة مختصه في انشاء الحساب , نقوم بالتحقق من صحة البيانات الواردة للتأكد من أن جميع البيانات واضحة وتطابق القاعدة، إذا كانت جميعها جيدة، فتقم بإنشاء مستخدم.

إضافة وظيفة تسجيل الدخول
 

public function login(Request $request){
        $loginUserData = $request->validate([
            'email'=>'required|string|email',
            'password'=>'required|min:8'
        ]);
        $user = User::where('email',$loginUserData['email'])->first();
        if(!$user || !Hash::check($loginUserData['password'],$user->password)){
            return response()->json([
                'message' => 'Invalid Credentials'
            ],401);
        }
        $token = $user->createToken($user->name.'-AuthToken')->plainTextToken;
        return response()->json([
            'access_token' => $token,
        ]);
    }

 

نحن نقوم بالتحقق من صحة الطلب والتأكد من وجود مستخدم بهذه المعلومات، ثم نقوم باستدعاء الدالة createToken() لإنشاء رمز مميز (Token) للمستخدم المسجل عن طريق تمرير اسمه أو أي معلومة ترغب فيها. بعد ذلك، نقوم بالوصول إلى خاصية plainTextToken بتسلسل الوصول للحصول على قيمة الرمز كنص عادي. في النهاية، نقوم بإرجاع استجابة JSON تحتوي على الرمز.

في النهايه إضافة وظيفة تسجيل الخروج
 

public function logout(){
    auth()->user()->tokens()->delete();

    return response()->json([
      "message"=>"logged out"
    ]);
}

الآن نحصل فقط على المستخدم الذي تمت مصادقته ونحذف الرموز الخاصة به

 

تم التعديل في بواسطة Taha Khalid
  • 0
نشر

Laravel Sanctum يوفر نظام مصادقة بسيط وخفيف الوزن لـ SPA (Single Page Applications)، والخدمات المتنقلة، والتوكنات البسيطة المستندة إلى API.

إليك عده خطوات بسيطه  لانشاء نظام المصادقة باستخدام Laravel Sanctum:

1. تثبيت Sanctum: 

composer require laravel/sanctum

2. نشر التكوين في دليل التكوين الخاص (config):

php artisan vendor:publish --provider="Laravel\Sanctum\SanctumServiceProvider"

3. تشغيل الترحيلات (Migrations):
   يجب تشغيل الترحيلات لإنشاء جداول البيانات اللازمة لـ Sanctum.

php artisan migrate

4. إضافة Sanctum's Middleware:
   يجب إضافة Sanctum's middleware إلى مجموعة الـ api middleware في ملف app/Http/Kernel.php:

'api' => [
    \Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class,
    \Illuminate\Routing\Middleware\ThrottleRequests::class.':api',
    \Illuminate\Routing\Middleware\SubstituteBindings::class,
],

5. إعداد نموذج المستخدم:
   يجب أن يستخدم نموذج User الخاص بك trait HasApiTokens من Sanctum.

use Laravel\Sanctum\HasApiTokens;

class User extends Authenticatable
{
	use HasApiTokens, Notifiable;
}

6.: تكوين الحماية

لحماية الـ routes التي تتطلب مصادقة، استخدم middleware sanctum. في ملف api.php أو web.php (حسب تطبيقك)، قم بإضافة sanctum كـ middleware للـ routes:

Route::middleware('auth:sanctum')->get('/user', function (Request $request) {
    return $request->user();
});

7. إنشاء الحساب وتسجيل الدخول وتسجيل الخروج: 

تسجيل الدخول في AuthController (قد تحتاج إلى إنشائه):

use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Hash;
use App\Models\User;
use Illuminate\Http\Request;

// تسجيل الدخول
public function login(Request $request)
{
	$request->validate([
		'email' => 'required|email',
		'password' => 'required',
	]);

	$user = User::where('email', $request->email)->first();

	if (!$user || !Hash::check($request->password, $user->password)) {
		return response()->json(['message' => 'Unauthorized'], 401);
	}

	$token = $user->createToken('authToken')->plainTextToken;

    return response()->json(['token' => $token]);}

إنشاء حساب:

// إنشاء حساب
public function register(Request $request)
{
	$request->validate([
		'name' => 'required|string|max:255',
        'email' => 'required|string|email|max:255|unique:users',
        'password' => 'required|string|min:8|confirmed',
	]);

	$user = User::create([
		'name' => $request->name,
		'email' => $request->email,
		'password' => Hash::make($request->password),
	]);
    $token = $user->createToken('authToken')->plainTextToken;

    return response()->json(['token' => $token]);
}

تسجيل الخروج:

public function logout(Request $request)
{
    // إبطال جميع رموز الوصول للمستخدم الحالي
    $request->user()->tokens()->delete();

    return response()->json(['message' => 'تم تسجيل الخروج بنجاح']);
}

8. تعريف المسارات:
   في routes/api.php, قم بإضافة المسارات اللازمة للتسجيل وتسجيل الدخول.

Route::post('/register', [AuthController::class, 'register']);
Route::post('/login', [AuthController::class, 'login']);
Route::middleware('auth:sanctum')->post('/logout', [AuthController::class, 'logout']);

تأكد من استيراد AuthController في أعلى ملف api.php.

9. اختبار الـ API:
يمكنك الآن اختبار إنشاء الحساب وتسجيل الدخول باستخدام Postman بإرسال طلبات POST إلى /api/register و /api/login و /api/logout مع البيانات المطلوبة.

تأكد من مراجعة الوثائق من الموقع الرسمي لتنفيذ كل خطوة https://laravel.com/docs/master/sanctum.

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...