কম্পিউটার টিউটোরিয়াল

রেলসে Devise মস্টার করুন: OmniAuth, API অথ, এবং Authtrail

এই সিরিজের প্রথম পর্বে, আমরা একটি উদাহরণ অ্যাপ ব্যবহার করে Devise পরিচিত করিয়েছিলাম, মডিউল, হেল্পার, ভিউ, কন্ট্রোলার, এবং রাউটস এক্সপ্লোর করে।

এই পর্বে, আমরা Devise-এর আরও অ্যাডভান্সড ব্যবহার এক্সপ্লোর করব, বিশেষ করে OmniAuth ব্যবহার, API অথেন্টিকেশন, এবং Authtrail।

সিডি ডাইভ ইন করি!

রুবির জন্য OmniAuth দিয়ে অথেন্টিকেশন

আজকাল, প্রায় প্রতিটি ওয়েব অ্যাপ্লিকেশন আপনার সম্মুখীন হবে যেটি আপনাকে এক বিস্তৃত অথেন্টিকেশন প্রোভাইডারের সিলেকশন দিয়ে লগ ইন করার অপশন দেয়, সোশ্যাল নেটওয়ার্ক যেন Twitter এবং Facebook থেকে Google, GitHub, এবং আরও অনেক কিছু।

অনেক কেসে, এই সুবিধাজনক মাল্টি-প্রোভাইডার অথেন্টিকেশন একটি লাইব্রেরি নামক OmniAuth-দ্বারা পাওয়ারড হয়। OmniAuth রুবির জন্য একটি ফ্লেক্সিবল এবং পাওয়ারফুল অথেন্টিকেশন লাইব্রেরি যা আপনাকে একাধিক এক্সটার্নাল প্রোভাইডারের সাথে ইন্টিগ্রেট করতে দেয়।

এটি বিভিন্ন OAuth প্রোভাইডারের সাথে কানেক্ট করার জন্য একটি সিম্পল এবং ইউনিফাইড API প্রদান করে। OmniAuth বিশেষভাবে উপযোগী যখন আপনি আপনার ইউজারদের সোশ্যাল মিডিয়া একাউন্ট ব্যবহার করে সাইন আপ বা লগ ইন করার অপশন দিতে চান। OmniAuth-র সাথে, আপনি সহজে আপনার রেলস অ্যাপ্লিকেশনে সোশ্যাল লগইন ফাংশনালিটি যোগ করতে পারেন।

যখন OmniAuth Devise জেমের সাথে ব্যবহার করা হয়, তবে ইউজার অথেন্টিকেশন এবং অথরাইজেশন ম্যানেজ করা আরও সহজ হয়ে যায়। আপনি Devise-এর বিল্ট-ইন অথেন্টিকেশন ফিচারগুলোর সুবিধা নিতে পারেন, OmniAuth ব্যবহার করে এক্সটার্নাল প্রোভাইডার সাইন-ইন অপশন দেওয়ার জন্য।

OmniAuth এবং Devise দিয়ে শুরু করা

বলা মতে, OmniAuth আপনাকে অনেক থার্ড-পার্টি অথেন্টিকেশন প্রোভাইডারের সাথে ইন্টিগ্রেট করতে দেয়। এই আর্টিকেলের জন্য, আমরা GitHub ব্যবহার করব।

OmniAuth জেমস ইনস্টল করা

আপনার অ্যাপের Gemfile-এ নিচের লাইনগুলো যোগ করুন:


এবং আপনি যদি OmniAuth ২.০+ জেম ব্যবহার করেন, তবে আপনাকে এই লাইনটিও যোগ করতে হবে:


omniauth-rails_csrf_protection জেম নিশ্চিত করে যে OAuth ফ্লোতে যেকোনো GET রিকোয়েস্ট ডিজেবল্ড থাকে। এটি OAuth রিকোয়েস্ট ফেজের আগে একটি রেলস CSRF টোকেন ভেরিফায়ারও ইনসার্ট করে। এই দুটি অ্যাকশন OAuth অথেন্টিকেশন ফ্লোকে টার্গেট করা ক্রস-সাইট ফোরজারি অ্যাটাক মিটিগেট করার জন্য।

এরপর, bundle install রান করুন জেমস ইনস্টল করতে।

GitHub-এ একটি নতুন OAuth অ্যাপ তৈরি করা

এখন আমাদের GitHub-এ একটি নতুন OAuth অ্যাপ তৈরি করতে হবে। এই অ্যাপটি একজন ইউজার হিসেবে কাজ করবে যার অথেন্টিকেশন পারমিশন আছে এবং যা সহজে রিভোক করা যায়, যদি প্রয়োজন হয়।

প্রথম ধাপ হলো আপনার GitHub অ্যাকাউন্ট প্রোফাইলের অধীনে সেটিংস পেজে যান। তারপর, বাম হাতের মেনুতে "Developer settings"-এ ক্লিক করুন। আপনি নিচের মতো একটি স্ক্রিন দেখবেন, যেখানে আপনি একটি নতুন OAuth অ্যাপ তৈরি করতে পারেন:

রেলসে Devise মস্টার করুন: OmniAuth, API অথ, এবং Authtrail

যখন আপনি "Register new application"-এ ক্লিক করবেন, আপনি নিচের মতো একটি স্ক্রিন পাবেন:

রেলসে Devise মস্টার করুন: OmniAuth, API অথ, এবং Authtrail

ফর্মের ডিটেইলস নিচের মত.Fill in the form details as follows:

  • Application name - আপনার নতুন OAuth অ্যাপকে একটি উপযুক্ত নাম দিন।
  • Homepage url - ফিলহাল https://localhost:3000/ ব্যবহার করুন। প্রোডাকশনে, আপনি আপনার অ্যাপের একচুয়াল হোমপেজ URL ব্যবহার করবেন।
  • Application description - আবশ্যক নয়, কিন্তু আপনি যদি অনেক অ্যাপ থাকে এবং সেগুলো ডিফারেনশিয়েট করতে চান তবে রাখতে পারেন।
  • Authorization callback url - এটি রিকোয়ার্ড ইনপুট এবং সাধারণত একটি OAuth কলব্যাক URL ফরম্যাট ফলো করে যেন https://<app-url>/users/auth/<application-provider>/callback। 즉, কিছু OAuth প্রোভাইডার যেন Google এই ফরম্যাট ফলো করে না, তাই সেটা লক্ষ্য রাখতে হবে।

এটা হয়ে গেলে, "Register application"-এ ক্লিক করুন। পরের স্ক্রিনে, একটি নতুন অ্যাপ সিক্রেট জেনারেট করুন এবং কোথাও সেফ প্লেসে নোট করুন (কারণ এটি আপনাকে একবারই দেখানো হবে)।

Devise ইনিশিয়ালাইজার কনফিগার করা

Devise ইনিশিয়ালাইজার config/initializers/devise.rb খুলুন এবং GitHub-নির্দিষ্ট OmniAuth সেকশনে নেভিগেট করুন। এটি সম্ভবত কমেন্টেড আউট থাকবে, তাই আনকমেন্ট করুন এবং আপনার নতুন GitHub OAuth অ্যাপের আইডি এবং সিক্রেট দিয়ে এডিট করুন:



OmniAuth কলব্যাকস কন্ট্রোলার তৈরি করা

আপনি যদি ইতিমধ্যে Devise কন্ট্রোলারগুলো জেনারেট করে থাকেন, তবে OmniauthCallbacksController আপনার কাস্টোমাইজেশনের জন্য রেডি থাকবে। যদি আপনার নেই, তবে ম্যানুয়ালি একটি তৈরি করুন, এবং নিচের মত এডিট করুন:


উপরের কোড সম্পর্কে কিছু নোট:

  • from_omniauth একটি মেথড যা আমরা আমাদের User মডেলে ইমপ্লিমেন্ট করব।
  • sign_in_and_redirect OAuth-র ভিতরে একটি মেথড।

User মডেল মডিফাই করার জন্য একটি মাইগ্রেশন যোগ করা

আমাদের এখন User মডেলে কিছু কলাম যোগ করতে হবে, স্পেসিফিক্যালি provider কলাম এবং একটি uid কলাম:


bundle exec rails db:migrate রান করুন এই স্টেপ ফাইনালাইজ করতে।

Devise মডেলকে Omniauthable বানানো

এখানে, আমাদের User মডেল এডিট করতে হবে Devise Omniauthable মডিউল যোগ করে:


এই পশ্চাতে, from_omni_auth মেথড যোগ করুন। এটি আমাদের সেটআপ করা Users::OmniauthCallbacksController থেকে কল হবে:


এখন আমাদের শুধু একটা কাজ বাকি: Devise ভিউগুলোর লগইন লিংকগুলো যোগ করা।

লগইন লিংক সেটআপ করা

ডিফল্টভাবে, Devise অটোমেটিক্যালি উপযুক্ত প্রোভাইডারের লগইন লিংক যোগ করে দেয় ইউজার রেজিস্ট্রেশন এবং লগইন ভিউতে। এই লিংক GET মেথড ব্যবহার করে, কিন্তু আমরা জানি OmniAuth ২.০+ POST রিকোয়েস্ট পছন্দ করে। তাই, আমাদের লিংকটি ডিজেবল করতে হবে এবং POST রিকোয়েস্ট ব্যবহার করে আমাদের নিজস্ব লিংক ইনসার্ট করতে হবে:


এতে, আমরা সফলভাবে Devise এবং GitHub OAuth অথেন্টিকেশনসহ একটি রুবি অন রেলস ৭ অ্যাপ সেটআপ করেছি। আপনি কম্পаньন অ্যাপের ফুল সোর্স কোড এখানে থেকে পেতে পারেন।

পরবর্তী, আমরা আরেকটি অ্যাডভান্সড ইউজ কেসে যাব: Devise ব্যবহার করে একটি API কল অথেন্টিকেট করা।

রুবির জন্য Devise দিয়ে API অথেন্টিকেশন

আজকাল, ইউজাররা আপনার অ্যাপের সাথে API দিয়ে কানেক্ট করতে এক্সপেক্ট করে তা অকমন নয়। এই সেকশনে, আমরা দেখব কীভাবে আমরা সेफলি এমন ইউজার রিকোয়েস্ট Devise ব্যবহার করে অথেন্টিকেট করতে পারি।

যেখানে ব্রাউজার-ভিত্তিক অথেন্টিকেশন সাধারণত কুকি-ভিত্তিক, সেখানে অধিকাংশ API অথেন্টিকেশন টোকেন দিয়ে হয় যাদের JSON Web Tokens (বা সিম্পলি JWTs) বলা হয়, যেগুলো হেডারে পাস করা হয়।

টিপ: এই সেকশনের উদ্দেশ্যে, আমরা অনুমান করব আমরা একটি রেলস API-অনলি অ্যাপের সাথে কাজ করছি। ফলো অলোং করতে, rails new app_name --api দিয়ে একটি তৈরি করুন।

JWT-ভিত্তিক অথেন্টিকেশন ফ্লো

যে কারণে বলা হয়েছে, API অথেন্টিকেশন JWT টোকেনের ওপর ভিত্তিক, এবং এটি গুরুত্বপূর্ণ যে আমরা বুঝি একটি JWT-ভিত্তিক অথেন্টিকেশন ফ্লো কীভাবে হয়। মূলত, এটি নিচের আউटलাইন করা জেনারেল সিকোয়েন্স অফ স্টেপস ফলো করে:

  • একজন ইউজার ক্লায়েন্ট API অ্যাপে একটি কল করে।
  • API অ্যাপ একটি JSON Web Token (JWT) দিয়ে রেসপন্ড করে, একটি অথেন্টিকেশন টোকেন যা কুকির জায়গায় ব্যবহার করা যায়।
  • ইউজার ক্লায়েন্টের পরবর্তী রিকোয়েস্টগুলো এই টোকেন ব্যবহার করে Authorization হেডারে করা হয়।
  • ইউজার তারপর Devise 'session destroy' অ্যাকশন হিট করতে পারে, যার ফলাফল টোকেন ডিস্ট্রাকশন এবং ইউজার লগ আউট।

এখন, এই ফ্লোকে একশনে রূপান্তর করি, শুরু করা যাক যেটাকে ক্রস-অরিজিন রিসোর্স শেয়ারিং (CORS) বলে।

CORS সেটআপ করা

CORS আমাদের API অ্যাপকে এক্সটার্নাল সোর্স থেকে রিকোয়েস্ট अलাউ করার জন্য সেটআপ করে। CORS একটি HTTP-ভিত্তিক সিকিউরিটি পলিসি যা ডিফাইন করে কীভাবে এক্সটার্নাল রিকোয়েস্ট আপনার অ্যাপ্লিকেশন দ্বারা হ্যান্ডেল হবে। ডিফল্টভাবে, CORS যেকোনো রিকোয়েস্ট ব্লক করে যা একটি ডিফারেন্ট ডোমেইন থেকে অরিজিনেট করেছে সেটা থেকে যা ইনিশিয়াল রিকোয়েস্ট করেছিল (অন্য কথায়, একটি ডিফারেন্ট "অরিজিন" থেকে আসা রিকোয়েস্ট)।

CORS ঠিকমতো হ্যান্ডেল করতে, আমরা নিফটি জেম rack-cors ব্যবহার করব। Gemfile-এ, নিচের লাইনটি আনকমেন্ট করুন, তারপর bundle install রান করুন:


এছাড়া, একটি সংশ্লিষ্ট CORS ইনিশিয়ালাইজার ফাইল খুলুন এবং নিচের মত মডিফাই করুন:


আমরা যা করলাম সেটা সম্পর্কে কিছু গুরুত্বপূর্ণ নোট:

  • origins "*" - সহজে বোঝায় যে আমাদের API অ্যাপ এখন যেকোনো অন্য সোর্স থেকে রিকোয়েস্ট রিসিভ করতে পারে।
  • expose: %w[Authorization Uid] - ডিফল্টভাবে, rack-cors জেম authorization এবং UID হেডার এক্সপোজ করে না, কিন্তু আমাদের সেগুলো দরকার যেহেতু আমরা অথরাইজেশন টোকেন পাস করব।

এটা হয়ে গেলে, Devise এবং আকম্পানিইং Devise-JWT জেম ইনস্টল করি।

আপনার রেলস অ্যাপে Devise এবং Devise-JWT জেম যোগ করা

devise-jwt জেম Devise-এর একটি এক্সটেনশন যা আমাদের JWT টোকেনের সাথে কাজ করতে দেবে। Gemfile-এ জেমগুলো যোগ করুন, তারপর bundle install রান করুন:


Devise ইনস্টল জেনারেটর bundle exec rails g devise:install রান করুন।

মডেল জেনারেট ও কনফিগার করা

আমাদের দুটি মডেল সেটআপ করতে হবে: নরম্যাল Devise ইউজার মডেল (bundle exec rails g devise User), এবং একটি মডেল যা আমরা রিভোকেশন স্ট্র্যাটেজির জন্য ব্যবহার করব (অন্য কথায়, একটি ইউজার API-র থেকে কীভাবে সাইন আউট করবে):


নরম্যাল Devise ইউজার মডেলকে API অথেন্টিকেশনের জন্য মডিফাই করি JWT টোকেন অথেনটিকেবল মডিউল যোগ করে এবং টোকেন রিভোকেশন স্ট্র্যাটেজি ডিফাইন করে আমাদের দ্বিতীয় মডেল, JwtDenylist ব্যবহার করতে:


এরপর, আমাদের দ্বিতীয় মডেল কনফিগার করি রিভোকেশন স্ট্র্যাটেজি এবং রিভোকেশন টেবিল রেফারেন্স করে:


পরবর্তী সেকশনে, আমরা টোকেন রিভোকেশন এবং কেন এটা দরকার সেটা আউटलাইন করব।

টোকেন রিভোকেশনের গুরুত্ব

টোকেন রিভোকেশন কেন গুরুত্বপূর্ণ? কারণ JWT টোকেনগুলো স্টেটলেস। সার্ভার তাদের সম্পর্কে কিছুই না জানে সাইন করার বাইরে। এই সিনেরিওতে, সার্ভারের কাছে কোনো উপায় নেই একটি ইউজারকে সাইন আউট করাতে সংশ্লিষ্ট টোকেন রিভোক করে। যেহেতু ইনডিভিজুয়াল টোকেন রিভোক করার কোনো উপায় নেই, আমাদের একটি বানাতে হবে এবং সার্ভারকে সেটা ব্যবহার করতে বলতে হবে।

একটি টোকেন রিভোক করার সময়, আসলেই হয়েছে যে, টোকেনের একটি ইউনিক পিস, jti (JWT ID), এক্সট্রাক্ট করা হয় এবং ডিফাইন করা রিভোকেশন স্ট্র্যাটেজি অনুযায়ী ব্যবহার করা হয়।

অবশ্য, এটা আরেকটি প্রশ্ন জাগায় যে টোকেন রিভোকেশন স্ট্র্যাটেজি কী। সংক্ষেপে, এটি আপনার সার্ভার দ্বারা টোকেন রিভোকেশন কীভাবে হ্যান্ডেল হবে সেটার একটি ডেফিনিশন। তিনটি বেসিক রিভোকেশন স্ট্র্যাটেজি আছে:

  • JTIMatcher স্ট্র্যাটেজি - এখানে, "jti" নামে একটি ইউনিক কলাম ইউজার মডেলে যোগ করা হয়, যা রিভোকেশন টেবিল ও হয়। যখনই একজন ইউজার একটি রিকোয়েস্ট করে, হেডারের jti স্টোরড টোকেনসের সাথে ম্যাচ করা হয় এবং অ্যাক্সেস আলাউড হয় শুধু যখন একটি ম্যাচ পাওয়া যায়।
  • ডেনিলিস্ট স্ট্র্যাটেজি (Denylist strategy) - এর জন্য, jti এবং টোকেন এক্সপায়রি (exp অফ রিভোকড টোকেনস) একটি ডাটাবেস টেবিলে স্টোর হয়। একজন ইউজার দ্বারা করা প্রতিটি রিকোয়েস্টের জন্য, এই টেবিলের বিপক্ষে একটি চেক করা হয় ইউজারের করেন্ট টোকেন jti রিভোকড যেগুলো ডাটাবেসে সেগুলোর সাথে কমপেয়ার করে। যদি ম্যাচ পাওয়া যায়, সেই ইউজারের রিকোয়েস্টগুলো ডেনাইড হয়।
  • অ্যালোলিস্ট স্ট্র্যাটেজি (Allowlist strategy) - একভাবে, এই স্ট্র্যাটেজি প্রথম স্ট্র্যাটেজির মত, ব্যতীত এখানে JWT IDs স্টোর করার টেবিল অন্য একটি টেবিলের সাথে वन-টু-মেনি রিলেশনশিপে থাকে যা ইউজার টোকেনস স্টোর করে। যখনই একটি রিকোয়েস্ট হয়, Allowlist টেবিলে স্টোর করা ইউজারের jti টোকেনস সাথেই স্টোর করা ম্যাচিং টেবিলের সাথে ম্যাচ করা হয়। অ্যাক্সেস শুধু আলাউড হয় যদি ম্যাচ পাওয়া যায়।

জাহির तौर पर, এটি টোকেন রিভোকেশনের একটি খুব সিম্পলফাইড ওভারভিউ, এবং আপনি এখানে থেকে আরো জানতে পারেন।

JWT টোকেনের জন্য একটি সাইনিং কী সেটআপ করা

যেহেতু আমরা সিকিউর টোকেন ব্যবহার করব ইউজার এবং তাদের রিকোয়েস্ট অথেন্টিকেট করার জন্য, আমাদের সেগুলো সাইন করার একটি উপায় দরকার। এখানেই আমাদের সিক্রেট কী কাজে আসে। রিকমেন্ড করা হয় যে আপনি একটি নতুন কী জেনারেট করুন যা রেলস সিক্রেট কী, secret_key_base-এর থেকে আলাদা।

bundle exec rake secret রান করুন একটি ইউনিক কী জেনারেট করতে, তারপর Devise ইনিশিয়ালাইজার এডিট করুন এই কীটি ইনক্লুড করতে:


শেষে, কন্ট্রোলারগুলো সেটআপ করি।

কন্ট্রোলার সেটআপ

Devise-র জন্য API অথেন্টিকেশন ইমপ্লিমেন্ট করার ফাইনাল স্টেপ হলো আমাদের কন্ট্রোলার সেটআপ করা। সিমপ্লিসিটির জন্য, আমরা দুটি কন্ট্রোলার সেটআপ করব: একটি রেজিস্ট্রেশন হ্যান্ডেল করার জন্য এবং অন্যটি সেশনস জন্য।

চলুন এগুলো ম্যানুয়ালি তৈরি করি, শুরু করা যাক রেজিস্ট্রেশন কন্ট্রোলার দিয়ে:


এই কন্ট্রোলারের সাথে কী হচ্ছে:

  • আমরা এটাকে JSON দিয়ে রিকোয়েস্টে রেসপন্ড করতে কনফিগার করি।
  • আমরা একটি respond_with অ্যাকশন স্পেসিফাই করি যা একটি সফল বা ব্যর্থ রেজিস্ট্রেশনের রেজাল্ট রিটার্ন করে।

এখন সেশন কন্ট্রোলারের জন্য:


রেজিস্ট্রেশন কন্ট্রোলারের মতোই, এখানেও আমরা স্পেসিফাই করি কন্ট্রোলার JSON দিয়ে রেসপন্ড করবে। আমরা একজন ইউজার সফলভাবে লগ ইন করলে একটি respond_with অ্যাকশন এবং একটি respond_to_on_destroy ডিফাইন করি যোজ户 সাইন আউট হ্যান্ডেল করতে।

এতে, আপনার কাছে Devise এবং JWT টোকেন দিয়ে পাওয়ার্ড একটি ওয়ার্কিং API অথেন্টিকেশন ফ্লো থাকব!

আমাদের ফাইনাল সেকশন এক দ্রুত লুক দেবে কীভাবে আপনি Devise এবং Authtrail ব্যবহার করে ইউজার লগইন ট্র্যাক করতে পারেন।

Authtrail দিয়ে Devise লগইন ট্র্যাক করা

মান लीজিয়ে আপনি আপনার অ্যাপ ইউজারদের একটি নোটিফিকেশন ইমেইল পাঠাতে চান যখন কেউ তাদের অ্যাকাউন্টে লগ ইন করে, ডিটেইলস সহ যেন IP অ্যাড্রেস এবং লগইনের টাইমস্ট্যাম্প। আপনি কীভাবে এটি অকমপ্লিশ করবেন?

আপনাকে ইউজার লগইন ট্র্যাক করতে হবে, তারপর সেই ইনফরমেশন ব্যবহার করতে হবে আপনার ইউজারদের পাঠানো নোটিফিকেশন ইমেইলগুলতে। কিন্তু প্রথমে, আপনাকে ইউজার লগইন ট্র্যাক করার একটি উপায় দরকার। এটা একটি নিফটি জেম দিয়ে অকমপ্লিশ করা যায় যেটা Authtrail, যা Devise-এর সাথে ভালো পেয়ার হয়।

Authtrail ইনস্টল করা

প্রথম ধাপ হলো bundle add authtrail দিয়ে জেমটি ইনস্টল করা। এছাড়া, যেহেতু আপনি ইউজার-আইডেন্টিফাইয়েবল ইনফরমেশন যেন ইমেইল এবং IP অ্যাড্রেস আপনার অ্যাপ ডাটাবেসে স্টোর করবেন, প্রোডাকশনে এই ডেটা এনক্রিপ্ট করা হাইলি রিকমেন্ডেড Lockbox এবং Blindindex জেমের কম্বিনেশন ব্যবহার করে।

এরপর, Authtrail জেনারেটর রান করুন এর ইনিশিয়ালাইজার এবং একটি সংশ্লিষ্ট টেবিল মাইগ্রেশন তৈরি করতে যা লগইন ডেটা স্টোর করবে:



Authtrail কীভাবে কাজ করে

যখনই একজন ইউজার লগ ইন করার চেষ্টা করে, একটি নতুন Authtrail রেকর্ড তৈরি হয় নিচের গুরুত্বপূর্ণ ডিটেইলস সহ:

  • ব্যবহৃত লগইন ইমেইল অ্যাড্রেস
  • লগইন সফল হয়েছে কিনা
  • লগইন ব্যর্থ হলে ব্যর্থতার কারণ
  • ইউজারের IP অ্যাড্রেস, referrer, এবং আরও অনেক কিছু

আপনি তারপর এই ইনফরমেশন আপনার ইচ্ছামতো ব্যবহার করতে পারেন। উদাহরণস্বরূপ, আপনি একটি নোটিফিকেশন ইমেইল পাঠাতে পারেন একটি ইউজারের কাছে, ইমেইল এবং IP অ্যাড্রেস ইনফরমেশন ইনক্লুড করে, যাতে তাদের জানতে পারেন তাদের অ্যাকাউন্টে একটি লগইন অটেম্পট করা হয়েছে।

Authtrail-এর ডকুমেন্টেশন ঘুরে আসুন আপনার কাছে উপলব্ধ সকল সম্ভাবনা দেখতে।

শেষ কথা

এই সিরিজে, আমরা Devise জেমে গভীরে ডুব করেছি।

প্রথমে, আমরা Devise-এর বেসিকস কন্ট্রোল করেছি, যার মধ্যে এর মডিউল, হেল্পার, ভিউ, কন্ট্রোলার, এবং রাউটস কীভাবে কাজ করে। এই দ্বিতীয় এবং চূড়ান্ত পর্বে, আমরা এক্সপ্লোর করেছি কীভাবে Devise OAuth, Authtrail, এবং API অথেন্টিকেশনের জন্য ব্যবহার করা যায়।

আশা করি এই সিরিজ Devise অথেন্টিকেশন সম্পর্কে সকল বিষয়ের জন্য একটি হেল্পফুল গাইড হিসেবে কাজ করবে।

হ্যাপি কোডিং!

P.S. রুবি ম্যাজিক পোস্টগুলো প্রেস থেকে বের होते সাথে পেতে চাইলে আমাদের রুবি ম্যাজিক নিউজলেটার সাবস্ক্রাইব করুন এবং একটিও পোস্ট মিস করবেন না!

  1. এন্ড্রয়েডে Volley JSON অ্যারে অবজেক্ট এলিমেন্ট পড়ার উপায়

  2. রিয়েল-টাইম ডেটা প্ল্যাটফর্ম: ফ্রড ডিটেক্ট করা এবং ফাইনেনশিয়াল অ্যাসেট রক্ষা করা

  3. Java OpenCV ব্যবহার করে ইমেজে বিটওয়াইজ NOT অপারেশন করার পদ্ধতি

  4. Git Cherry Pick: ধাপে ধাপে গাইড