CherryPy ব্যবহার করে আপনি সহজেই একটি Custom Authentication System তৈরি করতে পারেন। এই সিস্টেমের মাধ্যমে আপনি ব্যবহারকারীদের লগইন, সাইনআপ, এবং তাদের সেশন পরিচালনা করতে পারবেন। এই টিউটোরিয়ালে আমরা একটি সাধারণ username এবং password ভিত্তিক লগইন সিস্টেম তৈরি করবো।
1. Authentication System এর মৌলিক ধারণা
একটি সাধারণ Authentication System ব্যবহারকারীদের পরিচয় যাচাই করার জন্য ব্যবহৃত হয়, যেখানে:
- Login: ব্যবহারকারী একটি ইউজারনেম এবং পাসওয়ার্ড দিয়ে সিস্টেমে প্রবেশ করে।
- Session Management: লগইন হওয়া ব্যবহারকারীর জন্য সেশন তৈরি করা হয় যাতে তারা লগইন অবস্থায় থাকে।
2. CherryPy এর সাথে Custom Authentication
এই উদাহরণে আমরা:
- লগইন ফর্ম তৈরি করবো।
- সঠিক ইউজারনেম এবং পাসওয়ার্ড যাচাই করবো।
- একটি সেশন তৈরি করবো।
- সেশন যাচাই করে ব্যবহারকারীর এক্সেস কন্ট্রোল করবো।
উদাহরণ: Custom Authentication System
import cherrypy
import os
import json
# Dummy user data (In a real app, you'd use a database)
users_db = {
"admin": {"password": "admin123", "role": "admin"},
"user1": {"password": "user123", "role": "user"}
}
class AuthApp:
def __init__(self):
self.session = None # Store session details
def check_authentication(self):
# Check if a session exists
if not self.session or "username" not in self.session:
return False
return True
@cherrypy.expose
def index(self):
if not self.check_authentication():
return "You must be logged in to view this page. <a href='/login'>Login</a>"
return f"Welcome, {self.session['username']}! <a href='/logout'>Logout</a>"
@cherrypy.expose
def login(self, username=None, password=None):
if username and password:
# Check if user exists in the database
if username in users_db and users_db[username]["password"] == password:
self.session = {"username": username, "role": users_db[username]["role"]}
return f"Login successful! Welcome, {username}. <a href='/'>Go to home</a>"
else:
return "Invalid credentials! <a href='/login'>Try again</a>"
# Render login form
return '''
<html>
<body>
<form method="get" action="/login">
Username: <input type="text" name="username"><br>
Password: <input type="password" name="password"><br>
<input type="submit" value="Login">
</form>
</body>
</html>
'''
@cherrypy.expose
def logout(self):
self.session = None
return "Logged out successfully! <a href='/login'>Login again</a>"
if __name__ == '__main__':
cherrypy.config.update({
'server.socket_host': '127.0.0.1',
'server.socket_port': 8080,
})
cherrypy.quickstart(AuthApp())
কোড ব্যাখ্যা:
- Dummy User Database:
users_dbdictionary ব্যবহার করে ইউজারনেম এবং পাসওয়ার্ড সংরক্ষণ করা হয়েছে। একটি রিয়েল অ্যাপ্লিকেশনে, এই তথ্য একটি ডাটাবেসে সংরক্ষিত থাকে। - Session Management: ব্যবহারকারী সফলভাবে লগইন করলে, তাদের ইউজারনেম এবং রোল সেশন ভেরিয়েবলে সংরক্ষণ করা হয়। যদি সেশন না থাকে, তবে ব্যবহারকারীকে লগইন করতে বলা হয়।
indexমেথড: এটি হোম পেজ হিসেবে কাজ করে। যদি সেশন না থাকে, তবে ব্যবহারকারীকে লগইন পেজে রিডিরেক্ট করা হয়।loginমেথড: এখানে ব্যবহারকারী তাদের ইউজারনেম এবং পাসওয়ার্ড প্রদান করতে পারেন। যদি তারা সঠিক ইউজারনেম এবং পাসওয়ার্ড দেন, তবে সেশন তৈরি হয় এবং লগইন সফল হয়। অন্যথায়, ভুল তথ্য দেওয়ার জন্য একটি ত্রুটি বার্তা প্রদর্শিত হয়।logoutমেথড: এটি সেশন মুছে ফেলে, যার ফলে ব্যবহারকারী লগআউট হয়ে যায়।
3. সেশন সুরক্ষা
CherryPy তে সেশন পরিচালনা করার জন্য cherrypy.tools.sessions টুলস ব্যবহার করা যায়। এখানে সেশন ব্যবস্থাপনার জন্য cookie-based sessions ব্যবহৃত হয়েছে।
Session Configuration:
cherrypy.config.update({
'tools.sessions.on': True,
'tools.sessions.timeout': 60, # Timeout after 60 seconds of inactivity
})
4. পাসওয়ার্ড সুরক্ষা
এই উদাহরণে পাসওয়ার্ড সোজা প্লেইন টেক্সট আকারে সংরক্ষিত হয়েছে, যা রিয়েল অ্যাপ্লিকেশনে নিরাপদ নয়। বাস্তব জীবনে, পাসওয়ার্ড ক্রিপ্টোগ্রাফিক পদ্ধতিতে সংরক্ষণ করা উচিত। এর জন্য পাসওয়ার্ড hashing প্রযুক্তি যেমন bcrypt বা hashlib ব্যবহার করা যায়।
import hashlib
def hash_password(password):
return hashlib.sha256(password.encode('utf-8')).hexdigest()
# Example
hashed_password = hash_password("admin123")
5. অ্যাক্সেস কন্ট্রোল (Role-based Access Control)
চেরিপাইয়ের সাথে রোল-ভিত্তিক অ্যাক্সেস কন্ট্রোল (RBAC) ব্যবস্থাও বাস্তবায়ন করা সম্ভব। উদাহরণস্বরূপ, আপনি চেক করতে পারেন যে, লগইন করা ব্যবহারকারী admin রোলের সদস্য কিনা এবং সেই অনুযায়ী অ্যাক্সেস প্রদান করতে পারেন।
def check_admin(self):
if self.session['role'] != 'admin':
return False
return True
CherryPy দিয়ে একটি Custom Authentication System তৈরি করা খুবই সহজ এবং এর মাধ্যমে আপনি লগইন, সাইনআপ এবং সেশন ম্যানেজমেন্টের জন্য একটি শক্তিশালী সিস্টেম তৈরি করতে পারেন। এই সিস্টেমের মাধ্যমে আপনি ব্যবহারকারীদের প্রমাণীকরণ এবং অ্যাক্সেস কন্ট্রোল সহজে পরিচালনা করতে পারবেন। তবে, নিরাপত্তার জন্য বাস্তব অ্যাপ্লিকেশনগুলিতে পাসওয়ার্ড হ্যাশিং এবং SSL এর মতো নিরাপত্তা ব্যবস্থা ব্যবহার করা উচিত।
Read more