Symfony-তে Authentication বা ইউজার লগইন সিস্টেম ইমপ্লিমেন্ট করা একটি সাধারণ এবং শক্তিশালী প্রক্রিয়া। Symfony একটি বিল্ট-ইন সিকিউরিটি সিস্টেম সরবরাহ করে, যার মাধ্যমে আপনি ইউজারকে সাইন ইন, সাইন আউট এবং প্রিভিলেজ নিয়ন্ত্রণ করতে পারবেন। এখানে Authentication এবং Authorization সিস্টেম সম্পর্কে বিস্তারিত আলোচনা করা হলো।
Symfony Security Bundle
Symfony-তে SecurityBundle Authentication এবং Authorization পরিচালনার জন্য ব্যবহৃত হয়। এটি আপনাকে ইউজার যাচাইকরণ (Authentication) এবং তাদের অনুমতিপ্রদান (Authorization) করতে সাহায্য করে।
Authentication Flow:
- Authentication: ইউজারের পরিচয় যাচাই করা (যেমন, ইউজার নাম এবং পাসওয়ার্ড দিয়ে লগইন করা)।
- Authorization: ইউজারের অনুমতি পরীক্ষা করা, তিনি কি করতে পারেন বা কোন পৃষ্ঠায় প্রবেশ করতে পারেন।
1. Symfony সিকিউরিটি কনফিগারেশন
config/packages/security.yaml ফাইল কনফিগারেশন:
Symfony SecurityBundle-এ ইউজারের Authentication কনফিগারেশন করার জন্য security.yaml ফাইল ব্যবহার করা হয়।
security:
# ব্যবহারকারী authentication এবং authorization সেটআপ
providers:
in_memory: # ইন-মেমরি প্রোভাইডার, ডেমো ইউজারের জন্য
memory:
users:
user:
password: 'password' # ইউজার পাসওয়ার্ড
roles: 'ROLE_USER' # ইউজারের রোল
firewalls:
# ওয়েব অ্যাপ্লিকেশনের জন্য সিকিউরিটি ফায়ারওয়াল
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/ # ডেভেলপমেন্ট টুলস
security: false
main:
# ফর্ম-ভিত্তিক লগইন সিস্টেম
form_login:
login_path: login
check_path: login
logout:
path: logout
target: /
# ইউজারের জন্য সিকিউরিটি কন্ট্রোল
anonymous: true
access_control:
# রাউট ভিত্তিক অনুমতি (প্রতিটি রাউটের জন্য ইউজারের অনুমতি নির্ধারণ)
- { path: ^/admin, roles: ROLE_ADMIN }
- { path: ^/user, roles: ROLE_USER }
মূল কনফিগারেশন:
- providers:
- in_memory ব্যবহারকারী প্রোভাইডার সেটআপ করা হয়েছে, যেখানে ইউজার পাসওয়ার্ড এবং রোল ইন-মেমরি সেট করা আছে (ডেভেলপমেন্টে ব্যবহৃত)।
- firewalls:
form_login: ফর্ম-ভিত্তিক লগইন সিস্টেম পরিচালনা করে। ব্যবহারকারী লগইন করতেlogin_pathএবংcheck_pathদেওয়া হয়।logout: লগআউট করার জন্য পাথ এবং গন্তব্য নির্ধারণ করা হয়।
- access_control:
- এই অংশে আপনি নির্দিষ্ট রাউটের জন্য ইউজারের অনুমতি (roles) নির্ধারণ করতে পারেন, যেমন
/adminরাউটে শুধুমাত্রROLE_ADMINরোলের ইউজার প্রবেশ করতে পারবে।
- এই অংশে আপনি নির্দিষ্ট রাউটের জন্য ইউজারের অনুমতি (roles) নির্ধারণ করতে পারেন, যেমন
2. ইউজার লগইন ফর্ম তৈরি করা
Symfony-তে একটি লগইন ফর্ম তৈরি করতে, আমরা একটি Controller এবং একটি Twig Template ব্যবহার করব। এখানে একটি লগইন ফর্ম তৈরি করা হলো:
LoginController.php:
// src/Controller/LoginController.php
namespace App\Controller;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
class LoginController extends AbstractController
{
#[Route('/login', name: 'login')]
public function login(): Response
{
// যদি ইউজার ইতিমধ্যে লগইন থাকে, তবে হোম পেজে রিডাইরেক্ট
if ($this->getUser()) {
return $this->redirectToRoute('home');
}
return $this->render('security/login.html.twig');
}
}
login.html.twig:
{# templates/security/login.html.twig #}
<form method="post">
<label for="username">Username</label>
<input type="text" name="_username" id="username" value="{{ app.request.cookies['username'] }}"/>
<label for="password">Password</label>
<input type="password" name="_password" id="password"/>
<button type="submit">Login</button>
</form>
লগইন ফর্ম:
- ফর্মে দুইটি ইনপুট থাকবে: একটি ইউজারনেম এবং আরেকটি পাসওয়ার্ড।
- method="post" ব্যবহার করা হয়েছে যাতে ফর্মটি পাসওয়ার্ড সাবমিট করতে পারে।
- _username এবং _password এই প্যারামিটারগুলো স্বয়ংক্রিয়ভাবে Symfony সিকিউরিটি সিস্টেমে পাঠানো হয়।
3. ইউজার লগইন পরিচালনা করা
Symfony-এর সিকিউরিটি সিস্টেম লগইন প্রক্রিয়া স্বয়ংক্রিয়ভাবে পরিচালনা করে। যখন ইউজার সঠিক ইউজারনেম এবং পাসওয়ার্ড দিয়ে লগইন করেন, Symfony সেশন তৈরি করে এবং ইউজারকে গন্তব্যে রিডাইরেক্ট করে।
Logout এবং রিডাইরেকশন:
Symfony তে ইউজার লগআউট করার জন্য সিম্পল একটি logout রুট কনফিগার করা হয়:
security:
firewalls:
main:
logout:
path: logout
target: /
এতে logout রাউট ব্যবহারকারীকে লগআউট করার পর রিডাইরেক্ট করবে হোম পেজে।
4. ইউজারের Authorization:
Authorization ব্যবস্থা ব্যবহার করে আপনি নির্ধারণ করতে পারেন কোন ইউজার কিসের জন্য অনুমতি পাবে এবং কোন পৃষ্ঠায় প্রবেশ করতে পারবে।
Access Control উদাহরণ:
access_control:
- { path: ^/admin, roles: ROLE_ADMIN }
- { path: ^/user, roles: ROLE_USER }
এখানে /admin রাউটে ROLE_ADMIN রোল থাকা ইউজাররা প্রবেশ করতে পারবে এবং /user রাউটে ROLE_USER রোল থাকা ইউজাররা প্রবেশ করতে পারবেন।
5. ইউজার Authentication-এ Customizing
Symfony আপনাকে custom authentication তৈরি করার সুযোগও দেয়। আপনি যদি নিজের authentication লজিক তৈরি করতে চান, তবে Symfony AuthenticationProvider ব্যবহার করতে পারেন।
সারাংশ
Symfony-তে Authentication এবং Authorization ব্যবস্থাপনা করা খুবই শক্তিশালী এবং কাস্টমাইজযোগ্য। এটি SecurityBundle এবং security.yaml কনফিগারেশন ফাইলের মাধ্যমে ব্যবহারকারীদের লগইন, লগআউট এবং রোল-বেসড অ্যাকসেস কন্ট্রোল নিশ্চিত করে। Symfony এর বিল্ট-ইন সিকিউরিটি সিস্টেম সহজেই বিভিন্ন ধরনের Authentication ফিচার এবং ফর্মভিত্তিক লগইন সিস্টেম ইমপ্লিমেন্ট করতে সহায়ক।
Read more