Authentication হল ব্যবহারকারীর পরিচয় যাচাই করার প্রক্রিয়া। এটি নিশ্চিত করে যে, একটি সিস্টেমে প্রবেশ করা ব্যক্তি আসলেই সেই ব্যক্তি, যিনি দাবি করছেন। Socket.IO ব্যবহারের সময়, সাধারণত ব্যবহারকারীর পরিচয় যাচাই করার জন্য Client-Side এবং Server-Side Authentication একত্রে ব্যবহৃত হয়।
নিচে একটি Socket.IO-এ Authentication এর উদাহরণ দেওয়া হলো, যেখানে ব্যবহারকারী একটি টোকেন বা কুকি দ্বারা লগইন করে এবং সার্ভার সেই টোকেন যাচাই করে।
Client-Side Authentication উদাহরণ
Client-Side Authentication-এ সাধারণত, ব্যবহারকারীকে একটি লগইন ফর্মের মাধ্যমে তার তথ্য (যেমন ইউজারনেম এবং পাসওয়ার্ড) প্রেরণ করতে হয়, এবং তারপর সেই তথ্যের ভিত্তিতে সার্ভার ব্যবহারকারীকে যাচাই করে।
Client-Side (HTML + JavaScript)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Socket.IO Authentication Example</title>
<script src="https://cdn.socket.io/4.1.3/socket.io.min.js"></script>
<script>
// সার্ভারে কানেক্ট করার জন্য socket.io ব্যবহার করা হচ্ছে
const socket = io('http://localhost:3000');
// লগইন টোকেন পাঠানো
function loginUser() {
const token = document.getElementById('token').value; // ইউজার থেকে টোকেন নেওয়া
socket.emit('authenticate', { token: token }); // সার্ভারে টোকেন পাঠানো
}
// সার্ভার থেকে নির্দিষ্ট উত্তর পাওয়া
socket.on('authenticated', () => {
console.log('User authenticated successfully');
document.getElementById('status').textContent = 'Authentication successful!';
});
socket.on('unauthorized', () => {
console.log('Authentication failed');
document.getElementById('status').textContent = 'Authentication failed!';
});
</script>
</head>
<body>
<h1>Socket.IO Authentication</h1>
<input type="text" id="token" placeholder="Enter authentication token">
<button onclick="loginUser()">Login</button>
<p id="status"></p>
</body>
</html>এখানে, ক্লায়েন্ট একটি টোকেন ইনপুট করে সার্ভারে পাঠায় এবং সার্ভার সেই টোকেন যাচাই করে, তারপরে ব্যবহারকারীকে অনুমতি বা নিষেধাজ্ঞা প্রদান করে।
Server-Side Authentication উদাহরণ
Server-Side Authentication-এ সার্ভার ইনকামিং কানেকশন বা ইভেন্টের সময় টোকেন যাচাই করে। যদি টোকেন সঠিক হয়, তাহলে সার্ভার ক্লায়েন্টকে "authenticated" ইভেন্ট পাঠিয়ে জানায়। আর যদি টোকেন ভুল হয়, তাহলে "unauthorized" ইভেন্ট পাঠায়।
Server-Side (Node.js with Socket.IO)
const http = require('http');
const socketIo = require('socket.io');
const server = http.createServer((req, res) => {
res.end('Hello, Socket.IO with Authentication!');
});
const io = socketIo(server);
// পণ্য টোকেন যাচাই করার জন্য একটি মক ফাংশন
function authenticateToken(token) {
const validTokens = ['valid_token_123', 'valid_token_456']; // এখানে আমরা একটি স্ট্যাটিক টোকেন ব্যবহার করছি
return validTokens.includes(token);
}
// ক্লায়েন্ট কানেক্ট হলে
io.on('connection', (socket) => {
console.log('A user connected');
// ক্লায়েন্ট থেকে টোকেন গ্রহণ করা
socket.on('authenticate', (data) => {
const { token } = data;
if (authenticateToken(token)) {
// যদি টোকেন সঠিক হয়, তাহলে ব্যবহারকারীকে অনুমতি দেওয়া হবে
socket.emit('authenticated');
} else {
// যদি টোকেন ভুল হয়, তাহলে unauthorized ইভেন্ট পাঠানো হবে
socket.emit('unauthorized');
}
});
socket.on('disconnect', () => {
console.log('User disconnected');
});
});
server.listen(3000, () => {
console.log('Server is running on http://localhost:3000');
});এখানে, authenticateToken ফাংশনটি সার্ভারে ক্লায়েন্টের পাঠানো টোকেন যাচাই করে। যদি টোকেনটি বৈধ হয়, তবে সার্ভার ক্লায়েন্টকে authenticated ইভেন্ট পাঠায়, আর যদি টোকেনটি ভুল হয়, তবে unauthorized ইভেন্ট পাঠায়।
ব্যাখ্যা:
- Client-Side:
- ক্লায়েন্ট একটি টোকেন ইনপুট করে এবং এটি
socket.emit()মেথডের মাধ্যমে সার্ভারে পাঠায়। - সার্ভার থেকে যদি
authenticatedইভেন্ট পাওয়া যায়, তবে ক্লায়েন্ট নিশ্চিত হয় যে তার টোকেন বৈধ এবং সে সফলভাবে লগইন করেছে। - যদি সার্ভার থেকে
unauthorizedইভেন্ট পাওয়া যায়, তবে ক্লায়েন্ট জানবে যে তার টোকেন ভুল এবং লগইন ব্যর্থ হয়েছে।
- ক্লায়েন্ট একটি টোকেন ইনপুট করে এবং এটি
- Server-Side:
- সার্ভার
authenticateইভেন্ট গ্রহণ করে এবং ইনকামিং টোকেন যাচাই করে। যদি টোকেন সঠিক হয়, তবে সার্ভারauthenticatedইভেন্ট পাঠায়; অন্যথা,unauthorizedইভেন্ট পাঠায়।
- সার্ভার
সারাংশ:
- Client-Side Authentication: ক্লায়েন্টের দায়িত্ব হল ব্যবহারকারীর তথ্য (যেমন টোকেন) পাঠানো, এবং সার্ভার থেকে একটি সাড়া পাওয়ার মাধ্যমে জানা যে ব্যবহারকারী বৈধ কিনা।
- Server-Side Authentication: সার্ভারের দায়িত্ব হল পাঠানো টোকেন বা তথ্য যাচাই করা এবং যদি এটি সঠিক হয়, তবে ব্যবহারকারীকে অনুমোদন করা।
এই ধরনের authentication ব্যবস্থার মাধ্যমে আপনি Socket.IO অ্যাপ্লিকেশনগুলিতে ব্যবহারকারীদের নিরাপদভাবে যাচাই করতে পারেন এবং রিয়েল-টাইম যোগাযোগ সিস্টেমে তাদের অ্যাক্সেস কন্ট্রোল করতে পারেন।
Read more