Authentication এবং Authorization দুটি গুরুত্বপূর্ণ নিরাপত্তা প্রক্রিয়া যা ওয়েব অ্যাপ্লিকেশনে ব্যবহারকারীদের নিরাপদ প্রবেশাধিকার এবং তাদের ভূমিকা বা অনুমতির ভিত্তিতে সেবা প্রদান করতে সাহায্য করে। CodeIgniter-এ এই দুটি প্রক্রিয়া সহজে বাস্তবায়ন করা যায়। চলুন, আমরা Authentication (ব্যবহারকারী শনাক্তকরণ) এবং Authorization (অনুমোদন) প্রক্রিয়া কীভাবে CodeIgniter-এ প্রয়োগ করা হয় তা দেখি।
Authentication হলো একটি প্রক্রিয়া যার মাধ্যমে অ্যাপ্লিকেশন ব্যবহারকারীর পরিচয় যাচাই করে। এটি সাধারণত ইউজারনেম এবং পাসওয়ার্ড এর মাধ্যমে সম্পন্ন হয়। Authentication সফল হলে, ব্যবহারকারীকে অ্যাপ্লিকেশনে প্রবেশের অনুমতি দেওয়া হয়।
Authorization হলো একটি প্রক্রিয়া, যার মাধ্যমে নির্ধারিত হয় যে ব্যবহারকারী কোন কার্যক্রম করতে পারবে বা কোন সেকশনে অ্যাক্সেস পাবে। সাধারণত, একবার Authentication সফল হলে, Authorization সিদ্ধান্ত নেয় যে ব্যবহারকারী কোন নির্দিষ্ট রিসোর্স বা ফিচারে অ্যাক্সেস করতে পারে।
CodeIgniter-এ Authentication এবং Authorization বাস্তবায়ন করতে Session ব্যবহার করা হয়, যা লগইন স্টেট এবং ব্যবহারকারীর ভূমিকা সংরক্ষণে সাহায্য করে।
Auth.php
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class Auth extends CI_Controller {
public function __construct() {
parent::__construct();
$this->load->model('User_model');
$this->load->library('session');
}
public function login() {
// ফর্ম সাবমিট হলে
if ($this->input->post()) {
$username = $this->input->post('username');
$password = md5($this->input->post('password')); // পাসওয়ার্ড এমডি5 এ এনক্রিপ্ট
// ইউজার ডেটা যাচাই
$user = $this->User_model->get_user($username, $password);
if ($user) {
// সেশন ডেটা সেট করা
$this->session->set_userdata('user_id', $user['id']);
$this->session->set_userdata('username', $user['username']);
redirect('dashboard'); // ড্যাশবোর্ড পেজে রিডাইরেক্ট
} else {
$this->session->set_flashdata('error', 'Invalid username or password');
redirect('auth/login'); // ভুল লগইন হলে লগইন পেজে রিডাইরেক্ট
}
}
$this->load->view('login');
}
public function logout() {
$this->session->sess_destroy(); // সেশন ধ্বংস করা
redirect('auth/login'); // লগআউট হলে লগইন পেজে রিডাইরেক্ট
}
}
User_model.php
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class User_model extends CI_Model {
public function get_user($username, $password) {
$this->db->where('username', $username);
$this->db->where('password', $password);
$query = $this->db->get('users'); // 'users' টেবিল থেকে ইউজারের ডেটা খুঁজে বের করা
return $query->row_array(); // ইউজার তথ্য ফেরত
}
}
login.php
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Login</title>
</head>
<body>
<h2>Login</h2>
<?php if ($this->session->flashdata('error')): ?>
<p style="color: red;"><?php echo $this->session->flashdata('error'); ?></p>
<?php endif; ?>
<form method="post" action="<?php echo site_url('auth/login'); ?>">
<label>Username:</label>
<input type="text" name="username" required><br><br>
<label>Password:</label>
<input type="password" name="password" required><br><br>
<input type="submit" value="Login">
</form>
</body>
</html>
একবার Authentication সফল হলে, আপনি Authorization যোগ করতে পারেন, যা ব্যবহারকারীর ভূমিকা বা অনুমতি নির্ধারণ করবে।
Dashboard.php
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class Dashboard extends CI_Controller {
public function __construct() {
parent::__construct();
if (!$this->session->userdata('user_id')) {
redirect('auth/login'); // যদি ইউজার লগইন না থাকে তবে লগইন পেজে রিডাইরেক্ট
}
}
public function index() {
$this->load->view('dashboard');
}
public function admin() {
// ইউজারের ভূমিকা চেক করা
if ($this->session->userdata('role') !== 'admin') {
echo "Unauthorized access";
return;
}
$this->load->view('admin_dashboard');
}
}
dashboard.php
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Dashboard</title>
</head>
<body>
<h2>Welcome to Dashboard</h2>
<p>Welcome, <?php echo $this->session->userdata('username'); ?></p>
<a href="<?php echo site_url('auth/logout'); ?>">Logout</a>
</body>
</html>
users
টেবিলে ইউজারদের তথ্য এবং তাদের ভূমিকা (role) রাখতে হবে।
CREATE TABLE `users` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(100) NOT NULL,
`password` varchar(255) NOT NULL,
`role` varchar(50) NOT NULL DEFAULT 'user', -- 'user' বা 'admin' হবে
PRIMARY KEY (`id`)
);
CodeIgniter-এ Authentication এবং Authorization বাস্তবায়ন করার মাধ্যমে আপনি আপনার অ্যাপ্লিকেশনের নিরাপত্তা উন্নত করতে পারবেন। Authentication নিশ্চিত করে যে ব্যবহারকারী সঠিকভাবে লগইন করেছে, এবং Authorization নিশ্চিত করে যে তারা তাদের অনুমতি অনুযায়ী সেবা গ্রহণ করতে পারবে।
User Authentication একটি অত্যন্ত গুরুত্বপূর্ণ বৈশিষ্ট্য যেকোনো ওয়েব অ্যাপ্লিকেশনের জন্য, যা ব্যবহারকারীদের সিস্টেমে লগইন, সাইনআপ এবং সেশন পরিচালনা করতে সহায়ক। CodeIgniter-এ সহজেই User Authentication সিস্টেম তৈরি করা সম্ভব, এবং এটি ব্যবহারকারীর লগইন, সাইনআপ, লগআউট, সেশন পরিচালনা ইত্যাদি প্রক্রিয়াগুলো সহজ করে তোলে।
এই টিউটোরিয়ালে, আমরা একটি User Authentication সিস্টেম তৈরি করব যা ব্যবহারকারীর সাইনআপ, লগইন, এবং লগআউট প্রক্রিয়া পরিচালনা করবে।
প্রথমে, একটি ডাটাবেস তৈরি করুন এবং সেখানে একটি users টেবিল তৈরি করুন।
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(255) NOT NULL,
email VARCHAR(255) NOT NULL,
password VARCHAR(255) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
User Authentication এর জন্য একটি কন্ট্রোলার তৈরি করুন। এখানে আমরা Auth
নামক একটি কন্ট্রোলার তৈরি করব।
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class Auth extends CI_Controller {
public function __construct() {
parent::__construct();
$this->load->model('user_model'); // User model লোড করা
$this->load->library('session'); // Session লাইব্রেরি লোড
$this->load->helper(['form', 'url']); // Form এবং URL হেল্পার লোড
}
// সাইনআপ ফর্ম দেখানো
public function signup() {
$this->load->view('signup');
}
// সাইনআপ প্রক্রিয়া
public function register() {
$username = $this->input->post('username');
$email = $this->input->post('email');
$password = password_hash($this->input->post('password'), PASSWORD_BCRYPT); // পাসওয়ার্ড হ্যাশ করা
$data = [
'username' => $username,
'email' => $email,
'password' => $password
];
if ($this->user_model->insert_user($data)) {
redirect('auth/login');
} else {
$this->session->set_flashdata('error', 'User registration failed!');
redirect('auth/signup');
}
}
// লগইন ফর্ম দেখানো
public function login() {
$this->load->view('login');
}
// লগইন প্রক্রিয়া
public function authenticate() {
$email = $this->input->post('email');
$password = $this->input->post('password');
$user = $this->user_model->get_user_by_email($email);
if ($user && password_verify($password, $user['password'])) {
$session_data = [
'user_id' => $user['id'],
'username' => $user['username'],
'logged_in' => TRUE
];
$this->session->set_userdata($session_data);
redirect('welcome');
} else {
$this->session->set_flashdata('error', 'Invalid login credentials!');
redirect('auth/login');
}
}
// লগআউট প্রক্রিয়া
public function logout() {
$this->session->sess_destroy();
redirect('auth/login');
}
}
User Model তৈরি করে আমরা ডাটাবেসের সাথে যোগাযোগ করব। এখানে insert_user(), get_user_by_email() ফাংশনগুলো থাকবে।
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class User_model extends CI_Model {
// নতুন ব্যবহারকারী সাইনআপ
public function insert_user($data) {
return $this->db->insert('users', $data);
}
// ইমেইল দিয়ে ব্যবহারকারী অনুসন্ধান
public function get_user_by_email($email) {
$this->db->where('email', $email);
$query = $this->db->get('users');
return $query->row_array(); // একক রেকর্ড ফেরত আনে
}
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Sign Up</title>
</head>
<body>
<h2>Create an Account</h2>
<?php echo form_open('auth/register'); ?>
<label for="username">Username</label>
<input type="text" name="username" required><br>
<label for="email">Email</label>
<input type="email" name="email" required><br>
<label for="password">Password</label>
<input type="password" name="password" required><br>
<button type="submit">Sign Up</button>
<?php echo form_close(); ?>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Login</title>
</head>
<body>
<h2>Login to Your Account</h2>
<?php echo form_open('auth/authenticate'); ?>
<label for="email">Email</label>
<input type="email" name="email" required><br>
<label for="password">Password</label>
<input type="password" name="password" required><br>
<button type="submit">Login</button>
<?php echo form_close(); ?>
</body>
</html>
CodeIgniter-এ রুট কনফিগারেশন সেট করতে, application/config/routes.php
ফাইলে রুটগুলো উল্লেখ করতে হবে।
$route['default_controller'] = 'welcome';
$route['404_override'] = '';
$route['translate_uri_dashes'] = FALSE;
$route['auth/signup'] = 'auth/signup';
$route['auth/register'] = 'auth/register';
$route['auth/login'] = 'auth/login';
$route['auth/authenticate'] = 'auth/authenticate';
$route['auth/logout'] = 'auth/logout';
Session ব্যবহারকারী লগইন সেশন পরিচালনার জন্য ব্যবহৃত হয়। CodeIgniter এ সেশন ব্যবহারের জন্য session
লাইব্রেরি লোড করতে হয়। সেশন ব্যবহার করে লগইন তথ্য সংরক্ষণ এবং লগআউট করার সময় সেশন ধ্বংস করা হয়।
if ($this->session->userdata('logged_in')) {
// ইউজার লগইন অবস্থায় থাকলে
$username = $this->session->userdata('username');
} else {
// ইউজার লগইন না থাকলে লগইন পেজে রিডিরেক্ট
redirect('auth/login');
}
পাসওয়ার্ড সুরক্ষিত রাখার জন্য password_hash() এবং password_verify() ফাংশন ব্যবহার করা হয়। এটি পাসওয়ার্ড হ্যাশ করে ডাটাবেসে সংরক্ষণ করে এবং লগইন করার সময় সঠিকতা যাচাই করে।
এটি ছিল CodeIgniter-এ একটি User Authentication সিস্টেম তৈরি করার একটি মৌলিক উদাহরণ। এই সিস্টেমে সাইনআপ, লগইন, লগআউট এবং সেশন ব্যবস্থাপনা করা হয়। এর মাধ্যমে একটি শক্তিশালী এবং নিরাপদ Authentication সিস্টেম তৈরি করা সম্ভব, যা আপনার অ্যাপ্লিকেশনকে সুরক্ষিত এবং ব্যবহারকারীদের জন্য কার্যকরী করে তোলে।
User Roles এবং Permissions ব্যবস্থাপনা একটি ওয়েব অ্যাপ্লিকেশনের নিরাপত্তা এবং অ্যাক্সেস কন্ট্রোলের জন্য অত্যন্ত গুরুত্বপূর্ণ। CodeIgniter এ User Roles এবং Permissions ম্যানেজ করা সাধারণত ডাটাবেসে ইউজার, রোল এবং পারমিশন সম্পর্কিত টেবিল তৈরি করে পরিচালনা করা হয়।
এখানে, আমরা দেখবো কীভাবে Roles এবং Permissions সিস্টেম তৈরি করা যায়, যা ইউজারের অ্যাক্সেস নিয়ন্ত্রণে সহায়ক।
প্রথমে ডাটাবেসে তিনটি টেবিল তৈরি করা হবে:
CREATE TABLE `users` (
`id` INT NOT NULL AUTO_INCREMENT,
`username` VARCHAR(100) NOT NULL,
`password` VARCHAR(255) NOT NULL,
`email` VARCHAR(100) NOT NULL,
`role_id` INT NOT NULL,
PRIMARY KEY (`id`),
FOREIGN KEY (`role_id`) REFERENCES `roles`(`id`)
);
CREATE TABLE `roles` (
`id` INT NOT NULL AUTO_INCREMENT,
`role_name` VARCHAR(100) NOT NULL,
PRIMARY KEY (`id`)
);
CREATE TABLE `permissions` (
`id` INT NOT NULL AUTO_INCREMENT,
`permission_name` VARCHAR(100) NOT NULL,
PRIMARY KEY (`id`)
);
এটি roles এবং permissions টেবিলের মধ্যে সম্পর্ক তৈরি করবে।
CREATE TABLE `role_permissions` (
`role_id` INT NOT NULL,
`permission_id` INT NOT NULL,
FOREIGN KEY (`role_id`) REFERENCES `roles`(`id`),
FOREIGN KEY (`permission_id`) REFERENCES `permissions`(`id`)
);
এখন আমরা CodeIgniter এর Model তৈরি করব, যা ডাটাবেসের টেবিল থেকে ডেটা সঠিকভাবে প্রসেস করবে।
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class Role_model extends CI_Model {
public function get_roles() {
$query = $this->db->get('roles');
return $query->result();
}
public function get_permissions_by_role($role_id) {
$this->db->select('permissions.permission_name');
$this->db->from('role_permissions');
$this->db->join('permissions', 'permissions.id = role_permissions.permission_id');
$this->db->where('role_permissions.role_id', $role_id);
$query = $this->db->get();
return $query->result();
}
public function add_role($role_name) {
$data = ['role_name' => $role_name];
return $this->db->insert('roles', $data);
}
}
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class Permission_model extends CI_Model {
public function get_permissions() {
$query = $this->db->get('permissions');
return $query->result();
}
public function add_permission($permission_name) {
$data = ['permission_name' => $permission_name];
return $this->db->insert('permissions', $data);
}
}
এখন আমরা একটি Controller তৈরি করব যা ইউজার রোল এবং পারমিশন নিয়ন্ত্রণ করবে।
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class RoleController extends CI_Controller {
public function __construct() {
parent::__construct();
$this->load->model('Role_model');
$this->load->model('Permission_model');
}
// রোলের তালিকা দেখান
public function index() {
$data['roles'] = $this->Role_model->get_roles();
$this->load->view('role_view', $data);
}
// রোল তৈরি করুন
public function create_role() {
$role_name = $this->input->post('role_name');
$this->Role_model->add_role($role_name);
redirect('rolecontroller');
}
// একটি রোলের পারমিশন দেখুন
public function role_permissions($role_id) {
$data['permissions'] = $this->Role_model->get_permissions_by_role($role_id);
$this->load->view('permissions_view', $data);
}
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>User Roles</title>
</head>
<body>
<h1>User Roles</h1>
<form method="POST" action="<?php echo site_url('rolecontroller/create_role'); ?>">
<input type="text" name="role_name" placeholder="Role Name">
<input type="submit" value="Create Role">
</form>
<h2>Roles List</h2>
<ul>
<?php foreach ($roles as $role): ?>
<li>
<?php echo $role->role_name; ?>
<a href="<?php echo site_url('rolecontroller/role_permissions/'.$role->id); ?>">View Permissions</a>
</li>
<?php endforeach; ?>
</ul>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Role Permissions</title>
</head>
<body>
<h1>Permissions</h1>
<ul>
<?php foreach ($permissions as $permission): ?>
<li><?php echo $permission->permission_name; ?></li>
<?php endforeach; ?>
</ul>
</body>
</html>
একটি রোলের জন্য পারমিশন অ্যাসাইন করতে, একটি নতুন টেবিল (role_permissions
) তৈরি করা হয়েছিল, যা রোল এবং পারমিশন সম্পর্কিত রেকর্ড সংরক্ষণ করে। আপনি role_permissions টেবিল ব্যবহার করে পারমিশন অ্যাসাইন করতে পারেন।
এই সিস্টেমটি সম্পূর্ণ করার জন্য Authentication এবং Authorization সিস্টেমও তৈরি করতে হবে। এর মাধ্যমে একটি ইউজারের লগইন তথ্য যাচাই করে, তার রোল এবং পারমিশন অনুযায়ী অ্যাক্সেস কন্ট্রোল করা যাবে।
CodeIgniter-এ User Roles এবং Permissions ম্যানেজ করার জন্য ডাটাবেসে রোল এবং পারমিশন সম্পর্কিত টেবিল তৈরি করা হয় এবং মডেল, কন্ট্রোলার, ভিউয়ের মাধ্যমে সেগুলো পরিচালনা করা হয়। এটি নিরাপত্তা এবং অ্যাক্সেস কন্ট্রোলের জন্য একটি শক্তিশালী উপায়, যেখানে ইউজারের রোল অনুযায়ী অ্যাক্সেস নিয়ন্ত্রণ করা সম্ভব হয়।
CodeIgniter দিয়ে একটি Login এবং Registration System তৈরি করা একটি সাধারণ এবং কার্যকরী প্রক্রিয়া। এই সিস্টেমটি ব্যবহারকারীকে সাইন আপ এবং লগ ইন করার সুযোগ দেয়। সাধারণভাবে, এটি ব্যবহারকারীর তথ্য ডাটাবেসে সংরক্ষণ করে এবং লগইন করার সময় সেগুলির যাচাই করে।
প্রথমে একটি MySQL ডাটাবেস তৈরি করুন এবং একটি users টেবিল তৈরি করুন যেখানে ব্যবহারকারীর তথ্য সংরক্ষিত হবে।
CREATE DATABASE user_management;
USE user_management;
CREATE TABLE users (
id INT(11) AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(100) NOT NULL,
email VARCHAR(100) NOT NULL,
password VARCHAR(255) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
application/config/database.php
ফাইলে ডাটাবেস কনফিগারেশন যোগ করুন:
$db['default'] = array(
'dsn' => '',
'hostname' => 'localhost',
'username' => 'root',
'password' => '',
'database' => 'user_management',
'dbdriver' => 'mysqli',
'dbprefix' => '',
'pconnect' => FALSE,
'db_debug' => (ENVIRONMENT !== 'production'),
'cache_on' => FALSE,
'cachedir' => '',
'char_set' => 'utf8',
'dbcollat' => 'utf8_general_ci',
'swap_pre' => '',
'encrypt' => FALSE,
'compress' => FALSE,
'stricton' => FALSE,
'failover' => array(),
'save_queries' => TRUE
);
application/config/config.php
ফাইলে বেস URL সেট করুন:
$config['base_url'] = 'http://localhost/your_project_name/';
এখানে আমরা দুটি Controller তৈরি করবো: একটি RegistrationController এবং একটি LoginController।
application/controllers/RegistrationController.php
ফাইলে নিচের কোডটি যোগ করুন:
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class RegistrationController extends CI_Controller {
public function __construct() {
parent::__construct();
$this->load->model('UserModel'); // মডেল লোড
}
// রেজিস্ট্রেশন ফর্ম
public function index() {
$this->load->view('registration_form');
}
// রেজিস্ট্রেশন ডাটা ইনসার্ট করা
public function register() {
$username = $this->input->post('username');
$email = $this->input->post('email');
$password = password_hash($this->input->post('password'), PASSWORD_DEFAULT); // পাসওয়ার্ড হ্যাশ করা
$data = array(
'username' => $username,
'email' => $email,
'password' => $password
);
$this->UserModel->insert_user($data);
redirect('logincontroller'); // লগিন পেজে রিডিরেক্ট
}
}
application/controllers/LoginController.php
ফাইলে নিচের কোডটি যোগ করুন:
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class LoginController extends CI_Controller {
public function __construct() {
parent::__construct();
$this->load->model('UserModel');
}
// লগিন ফর্ম
public function index() {
$this->load->view('login_form');
}
// লগিন যাচাই
public function login() {
$email = $this->input->post('email');
$password = $this->input->post('password');
$user = $this->UserModel->get_user_by_email($email);
if ($user && password_verify($password, $user['password'])) {
// সেশন তৈরি
$this->session->set_userdata('user_id', $user['id']);
redirect('dashboard');
} else {
$this->session->set_flashdata('error', 'Invalid email or password');
redirect('logincontroller');
}
}
}
application/models/UserModel.php
ফাইলে নিচের কোডটি যোগ করুন:
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class UserModel extends CI_Model {
// ব্যবহারকারী ইনসার্ট করা
public function insert_user($data) {
return $this->db->insert('users', $data);
}
// ইমেইল দিয়ে ব্যবহারকারী বের করা
public function get_user_by_email($email) {
$this->db->where('email', $email);
$query = $this->db->get('users');
return $query->row_array();
}
}
registration_form.php
)application/views/registration_form.php
ফাইলে নিচের কোডটি যোগ করুন:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Registration</title>
</head>
<body>
<h2>Register</h2>
<?php echo form_open('registrationcontroller/register'); ?>
<label for="username">Username:</label>
<input type="text" name="username" required><br><br>
<label for="email">Email:</label>
<input type="email" name="email" required><br><br>
<label for="password">Password:</label>
<input type="password" name="password" required><br><br>
<input type="submit" value="Register">
</form>
</body>
</html>
login_form.php
)application/views/login_form.php
ফাইলে নিচের কোডটি যোগ করুন:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Login</title>
</head>
<body>
<h2>Login</h2>
<?php echo form_open('logincontroller/login'); ?>
<label for="email">Email:</label>
<input type="email" name="email" required><br><br>
<label for="password">Password:</label>
<input type="password" name="password" required><br><br>
<input type="submit" value="Login">
</form>
<?php if ($this->session->flashdata('error')): ?>
<p style="color: red;"><?php echo $this->session->flashdata('error'); ?></p>
<?php endif; ?>
</body>
</html>
application/config/routes.php
ফাইলে routes কনফিগার করুন:
$route['default_controller'] = 'logincontroller';
$route['logincontroller'] = 'logincontroller';
$route['registrationcontroller'] = 'registrationcontroller';
$route['dashboard'] = 'dashboardcontroller'; // একটি ড্যাশবোর্ড কন্ট্রোলার তৈরি করতে হবে
application/config/config.php
ফাইলে সেশন কনফিগারেশন যোগ করুন:
$config['sess_driver'] = 'files';
$config['sess_cookie_name'] = 'ci_session';
$config['sess_expiration'] = 7200; // 2 hours
$config['sess_save_path'] = NULL; // default to temp directory
এই উদাহরণটি CodeIgniter-এ Login এবং Registration সিস্টেম তৈরি করার জন্য একটি সাধারণ গাইড। আপনি এটি কাস্টমাইজ করতে পারেন যেমন ইমেইল যাচাই বা password reset ফিচার যোগ করা। এই সিস্টেমটি সুরক্ষিত এবং কার্যকরী পদ্ধতিতে ব্যবহারকারী তথ্য পরিচালনা করতে সাহায্য করবে।
OAuth 2.0 এবং Third-party Authentication আজকাল অনেক ওয়েব অ্যাপ্লিকেশনে সাধারণ প্র্যাকটিস হয়ে উঠেছে, বিশেষত সুরক্ষিত অথেন্টিকেশন এবং অ্যাক্সেসের জন্য। CodeIgniter এ OAuth 2.0 এবং Third-party Authentication সেটআপ করা বেশ সহজ এবং এটি তৃতীয় পক্ষের সার্ভিস যেমন Google, Facebook, Twitter ইত্যাদি থেকে লগইন অথবা অ্যাক্সেস প্রদান করতে সাহায্য করে।
OAuth 2.0 হল একটি প্রটোকল যা তৃতীয় পক্ষের অ্যাপ্লিকেশনকে ব্যবহারকারীর অ্যাকাউন্টে অ্যাক্সেস প্রদান করার অনুমতি দেয়, ব্যবহারকারীর পাসওয়ার্ড জানার প্রয়োজন ছাড়াই। এটি একাধিক অ্যাপ্লিকেশন বা সার্ভিসের মধ্যে নিরাপদ ডেটা শেয়ার করার জন্য ব্যবহৃত হয়।
OAuth 2.0-এ সাধারণত তিনটি পদ্ধতি ব্যবহৃত হয়:
Third-party Authentication হলো এমন একটি পদ্ধতি যেখানে ব্যবহারকারীরা তৃতীয় পক্ষের প্রোভাইডারের মাধ্যমে লগইন করেন, যেমন Google, Facebook, Twitter, ইত্যাদি। এটি সাধারণত OAuth 2.0 প্রটোকল ব্যবহার করে, যেখানে তৃতীয় পক্ষের সিস্টেম ব্যবহারকারীর অ্যাকাউন্টের অ্যাক্সেস দেয়।
OAuth 2.0 ব্যবহার করতে CodeIgniter এ সাধারণত একটি লাইব্রেরি ব্যবহার করা হয়, যেমন CodeIgniter-OAuth2
অথবা HybridAuth
লাইব্রেরি। এই লাইব্রেরিগুলি আপনাকে OAuth 2.0 প্রটোকল ব্যবহার করে তৃতীয় পক্ষের অ্যাপ্লিকেশন থেকে অথেন্টিকেশন পরিচালনা করতে সহায়তা করে।
HybridAuth
লাইব্রেরি ব্যবহারHybridAuth হলো একটি ওপেন সোর্স PHP লাইব্রেরি যা তৃতীয় পক্ষের সামাজিক সাইট থেকে অথেন্টিকেশন প্রদান করতে সহায়ক। এটি Google, Facebook, Twitter, LinkedIn, GitHub সহ অন্যান্য প্ল্যাটফর্মের সাথে ইন্টিগ্রেশন সমর্থন করে।
application/libraries
ডিরেক্টরিতে রাখুন।application/config/hybridauthlib.php
কনফিগারেশন ফাইল তৈরি করুন এবং আপনার প্রয়োজনীয় API কীগুলি সংরক্ষণ করুন।<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
$config = array(
'callback' => 'http://localhost/your_project/index.php/auth/callback',
'providers' => array(
'Google' => array(
'enabled' => true,
'keys' => array('id' => 'YOUR_GOOGLE_CLIENT_ID', 'secret' => 'YOUR_GOOGLE_SECRET'),
'scope' => 'email', // Requesting user's email address
),
'Facebook' => array(
'enabled' => true,
'keys' => array('id' => 'YOUR_FACEBOOK_APP_ID', 'secret' => 'YOUR_FACEBOOK_APP_SECRET'),
'scope' => 'email',
),
// Add other providers like Twitter, LinkedIn, etc.
)
);
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class Auth extends CI_Controller {
public function __construct() {
parent::__construct();
$this->load->library('hybridauthlib');
}
public function login() {
// Google বা Facebook এর জন্য লগইন প্রক্রিয়া শুরু
$this->hybridauthlib->authenticate('Google'); // বা 'Facebook'
}
public function callback() {
// Callback URL যেখানে তৃতীয় পক্ষের সিস্টেম থেকে রেসপন্স আসবে
$adapter = $this->hybridauthlib->adapter('Google'); // অথবা 'Facebook'
// ব্যবহারকারীর তথ্য নিয়ে আসুন
$user_profile = $adapter->getUserProfile();
// প্রাপ্ত তথ্য দেখান বা ডেটাবেসে সংরক্ষণ করুন
print_r($user_profile);
}
}
<a href="<?php echo site_url('auth/login'); ?>">Login with Google</a>
<!-- অথবা Facebook -->
<a href="<?php echo site_url('auth/login/facebook'); ?>">Login with Facebook</a>
CodeIgniter-এ যদি আপনি একটি OAuth 2.0 সার্ভিস তৈরি করতে চান, তাহলে OAuth2
লাইব্রেরি ব্যবহার করা যেতে পারে। এই লাইব্রেরি API এর মাধ্যমে অথেন্টিকেশন এবং অথরাইজেশন পরিচালনা করতে সাহায্য করে।
CodeIgniter-এ OAuth2 Server লাইব্রেরি ব্যবহার করতে OAuth2
লাইব্রেরি ইনস্টল করুন। আপনি OAuth2 PHP Library ব্যবহার করতে পারেন।
// OAuth2 Server Configuration
$storage = new OAuth2\Storage\Pdo(array('dsn' => 'mysql:dbname=oauth;host=localhost', 'username' => 'root', 'password' => 'password'));
$server = new OAuth2\Server($storage);
// Define the type of grant (authorization code, password, etc.)
$server->addGrantType(new OAuth2\GrantType\UserCredentials($storage));
public function api_login() {
$server->handleTokenRequest(OAuth2\Request::createFromGlobals())->send();
}
OAuth 2.0 এবং Third-party Authentication CodeIgniter-এ দ্রুত এবং নিরাপদে ইন্টিগ্রেট করা যায়। HybridAuth লাইব্রেরি বা OAuth2 Server লাইব্রেরি ব্যবহার করে আপনি তৃতীয় পক্ষের লগইন পরিষেবাগুলি যেমন Google, Facebook, Twitter সহজে সংযোগ করতে পারেন। OAuth 2.0 প্রটোকল ব্যবহার করে আপনাদের অ্যাপ্লিকেশন আরও নিরাপদ, স্কেলেবল এবং ব্যবহারকারী-বান্ধব হতে পারে।
Read more