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

Ruby on Rails-এ Auth0 দিয়ে অথেন্টিকেশন স্ট্রিমলাইন: একটি বিগিনার্স গাইড

কাস্টম-মেড থেকে প্লাগ-অ্যান্ড-প্লে অথেন্টিকেশন ফর্ম পর্যন্ত, Ruby ডেভেলপারদের আজकल পছন্দের অনেক অপশন আছে। যেটা আপনি জানেন, নিজের সমাধান বিল্ড করা ব্যয়বহুল এবং ঝুঁকিপূর্ণ হতে পারে। Devise যদি অধিকাংশ টিমের জন্য ডি ফ্যাক্টো স্ট্যান্ডার্ড, একটি বিকল্প অধিকাংশের জীবন সরল করতে পারে।

এই আর্টিকেলটি একটি Ruby on Rails অ্যাপ্লিকেশনে Auth0-এর সেটআপ এবং ব্যবহার কভার করবে, যার মধ্যে রয়েছে সঠিকভাবে শুরু করার জন্য আপনার প্রয়োজন সব কিছু, রোল হ্যান্ডলিং থেকে একাধিক প্রোভাইডার 믿고 ইউজার অথেন্টিকেট করতে।

শুরু করা

এখানে যা যা দরকার আমাদের শুরু করার জন্য:

  • একটি Auth0 অ্যাকাউন্ট
  • একটি Ruby on Rails অ্যাপ্লিকেশন (ভার্সন ৭.০ বা তার উপরে)

Auth0 একটি থার্ড-পার্টি অথেন্টিকেশন সার্ভিস যার একটি ফ্রি টিয়ার আছে যা ৭,০০০ ইউজার পর্যন্ত হ্যান্ডল করতে দেয়। শুরু করার জন্য এটা পর্যাপ্ত, এবং আরও এডভান্সড ফিচার দরকার হলে এর প্রাইসিংリーズনেবল।

Auth0-এ আমাদের Ruby অ্যাপ কনফিগার করা

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

আমাদের Auth0 অ্যাকাউন্টে, চলুন একটি টেনান্টের মধ্যে একটি অ্যাপ্লিকেশন তৈরি করি। আপনি একটি অ্যাকাউন্টে একাধিক টেনান্ট তৈরি করতে পারেন আলাদা করতে:

  • ডোমেইন নাম।
  • বিভিন্ন এনভায়রনমেন্ট (ডেভেলপমেন্ট, প্রোডাকশন, ইত্যাদি)।
  • দেশ বা রিজিওন যেখানে ডেটা স্টোর হবে।

একবার আপনি আপনার প্রথম টেনান্ট তৈরি করলে, আপনি একটি অ্যাপ্লিকেশন বিল্ড করতে পারেন। সেটিই আমরা শুরু করব।

"Settings" ট্যাবে যান অ্যাপ্লিকেশন প্যানেলে। আপনাকে নিচেরগুলো কপি করে একটি সুরক্ষিত জায়গায় সংরক্ষণ করতে হবে:

  • ডোমেইন নাম: app-name.[eu,us,..].auth0.com
  • ক্লায়েন্ট আইডি
  • ক্লায়েন্ট সিক্রেট

আমাদের নিচের Application URIs পূরণ করতে হবে। আমরা আমাদের লোকাল ডেভেলপমেন্ট সেটআপের জন্য এই মানগুলো ব্যবহার করব:

  • Allowed Callback URLs: https://localhost:3000/auth/auth0/callback (অথেন্টিকেশনের পর Auth0 যেটি রিডাইরেক্ট করবে)।
  • Allowed Logout URLs: https://localhost:3000 (কেউ লগআউট করলে Auth0 যেটি রিডাইরেক্ট করবে)।

চলুন আমাদের অ্যাপ কনফিগার করি।

আমাদের Ruby on Rails অ্যাপ্লিকেশন প্রস্তুত করা

আপনি rails new কমান্ড ব্যবহার করে একটি ভ্যানিলা Ruby on Rails অ্যাপ্লিকেশন দিয়ে শুরু করতে পারেন।

চলুন একটি জেনারেট করি যা ডাটাবেসের জন্য SQLite3 এবং CSS লাইব্রেরির জন্য Tailwind ব্যবহার করে। মিনি-টেস্ট ইনস্টলেশন স্কিপ করুন এবং অ্যাপ্লিকেশনটি "Auth0 article" নাম দিন:


সুশু কিছু অ্যাট্রিবিউট সহ একটি User মডেল তৈরি করুন:


এটি আমাদের অ্যাপ্লিকেশনের জন্য একটি সিম্পল কিন্তু ইফিশিয়েন্ট বেস তৈরি করে।

অ্যাপে Auth0 জেম যোগ করা

আপনার Ruby on Rails অ্যাপ্লিকেশনে Auth0 ব্যবহার করতে omniauth-auth0 এবং omniauth-rails_csrf_protection দরকার।



Auth0 কনফিগার করা

আমাদের ডেভেলপমেন্ট এনভায়রনমেন্টে শংসার স্টোর করার জন্য একটি ছোট কনফিগারেশন ফাইল (config/auth0.yml) তৈরি করতে হবে।


এখানে কিছু ERB ব্যবহার করে এনভায়রনমেন্ট ভেরিয়েবলেও নির্ভর করতে পারি:


নিশ্চিতভাবেই, Ruby on Rails ক্রেডেনশিয়ালস উপর নির্ভর করলে জিনিসগুলো আরও আপ-টু-ডেট থাকে।

এই ফাইলটি Auth0 ইনিশিয়ালাইজার (config/initializers/auth0.rb) এ ব্যবহার করা হবে, যা আমরা এখন তৈরি করব:


আপনি এখানে দেখতে পাচ্ছেন, আমরা Rails.application.config_for ব্যবহার করছি একটি YAML ফাইলের কন্টেন্ট একটি সুবিধাজনক হ্যাশ হিসেবে লোড করতে। আমরা যেকোনো সিক্রেট হ্যান্ডলিং লাইব্রেরি দিয়ে এটি রিপ্লেস করতে পারি, যার মধ্যে রয়েছে Rails এনক্রিপ্টেড ক্রেডেনশিয়ালস স্টোরেজ।

নিচের বিষয়গুলো নোট করুন:

  • প্রোভাইডার নাম (:auth0)
  • YAML ফাইল থেকে তিনটি আইটেম, AUTH0_CONFIG হ্যাশ 통해 পড়া এবং ব্যবহৃত।
  • callback_path কী এবং মান, যা আমরা Auth0 ইন্টারফেসে কনফিগার করেছিলাম।
  • authorize_params এবং তার ভিতরে scope কী; আমরা পরে সেটি নিয়ে আলোচনা করব।

অথেন্টিকেশন অনুমতি দেওয়ার জন্য ইন্টারফেস এবং রাউটিং এলিমেন্ট তৈরি করতে হবে।

Tailwind-র সাথে রাউট এবং UI সেট আপ করা

এই উদাহরণে, আমরা Ruby on Rails অ্যাপ্লিকেশন নিয়ে কাজ করব ফ্রেমওয়ার্কের ভার্সন ৭.১ এবং TailwindCSS-র সাথে।

নিচের কমান্ডটি ব্যবহার করুন:


তারপর index অ্যাকশন সহ দুটি কন্ট্রোলার যোগ করুন, অথেন্টিকেশন প্রসেস টেস্ট করার জন্য প্রস্তুতি নিতে:


এই দুটি কমান্ডের সাথে, নিচেরগুলো তৈরি হয়:

  • public_controller.rb এবং private_controller.rb উভয় কন্ট্রোলার, index অ্যাকশন রেডি টু ইউজ
  • উভয় সংশ্লিষ্ট রাউট
  • সংশ্লিষ্ট ভিউ

Auth0 কন্ট্রোলার যোগ করুন কলব্যাক এবং ফেইলার হ্যান্ডেল করার জন্য। কন্ট্রোলার ফাইল তৈরি করুন (bin/rails g controller auth0) এবং নিচের কোড যোগ করুন:


তারপর রাউট আপডেট করুন সেই তিনটি অ্যাকশন ব্যবহার করতে:


তারপর পাবলিক এবং প্রাইভেট ভিউতে Login এবং Logout বাটন যোগ করুন:


আপনি এখন 'https://localhost:3000'-এ যেতে পারেন। Login বাটন ব্যবহার করুন এবং আপনি প্রাইভেট পেজে রিডাইরেক্ট হবেন। সেখানে, আপনি একটি Logout বাটন পাবেন।

কয়েকটি জিনিস বাকি, যেগুলো:

  • একটি ইউজারের প্রোফাইল থেকে ডেটা
  • একটি ইউজার আইডেন্টিফাই করা এবং অথরাইজেশন হ্যান্ডল করা

স্কোপ এবং ডেটা নিয়ে কাজ করা

কয়েকটি ধাপ পিছনে যাই এবং ইনিশিয়ালাইজার ফিরে আনি (config/initializers/auth0.rb):


এখানে জরুরি টুকরো হলো স্কোপ: openid profile। এটি Auth0-কে বলে আমরা কয়েক টুকরো ইনফরমেশনে আগ্রহী, অর্থাৎ:

  • প্রোভাইডার নাম (Auth0)
  • একটি uid: একটি ইউজার ম্যাচ করার জন্য একটি ইউনিক আইডেন্টিফায়ার
  • একটি info হ্যাশ: একটি নাম, প্রোফাইল ছবির URL, এবং একটি খালি 'email' কী ধারণ করে
  • একটি extra_info হ্যাশ: আবার একটি নাম এবং প্রোফাইল ছবি, কিন্তু গיוון করা এবং ফ্যামিলি নামের একটি জোড়াও

Auth0-এর ডকুমেন্টেশনে স্কোপ সম্পর্কে আরো পড়ুন।

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

এটি করতে, আমাদের auth0_controller-এ রিকোয়েস্ট-রেসপONSE কন্টেন্ট ব্যবহার করতে হবে, এবং স্পেসিফিক্যালি, callback অ্যাকশনে:


রিডাইরেক্টের আগে একটি ব্রেকপয়েন্ট ব্যবহার করুন হ্যাশে খনন এবং এক্সপেরিমেন্ট করার জন্য।

আমরা সাধারণত ইমেইল অ্যাড্রেসও চাই। সেটি পেতে, আপনি স্কোপ আপডেট করতে পারেন:


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

এখন আমরা callback অ্যাকশনে এরকম কিছু করতে পারি:


এটি নিশ্চিত করবে আমাদের ইউজারের জন্য একটি লোকাল, আপ-টু-ডেট প্রোফাইল আছে।

সেশন সম্পর্কে একটু কথা

এক সেশন একটি Ruby on Rails অ্যাপ্লিকেশনে একটি স্পেশাল হ্যাশ। এর লিমিটেড স্টোরেজ আছে যা কন্ট্রোলার এবং ভিউ থেকে অ্যাক্সেসযোগ্য এবং প্রতিটি ভিজিটরের জন্য ইউনিক।

আমরা সেশন "খুলতে" এবং "বন্ধ করতে" পারি। আপনি যদি একটি নির্দিষ্ট ডেটাসেট দরকার হন, আপনি ডিসাইড করতে পারেন সেশনটি ওপেন। যদি এর কোনো ডেটা না থাকে, তবে সেটি বন্ধ।

আমাদের Auth0 কন্ট্রোলারে নিচের লাইনগুলো মনে রাখুন:


প্রথমটি হ্যাশের raw_info কী-র ভ্যালু সেশন হ্যাশে লিখে, দ্বিতীয়টি শুধু সেশন হ্যাশ ক্লিয়ার করে।

তারপর আমরা ApplicationHelper-এ নিচের হেল্পার মেথড ডিফাইন করতে পারি:



একটি সিকিউরিটি কনসার্ন

এখন আমরা এটিকে আমাদের কন্ট্রোলারদের জন্য একটি কনসার্ন হিসেবে ব্যবহার করব। আইডিয়া হলো একটি কন্ট্রোলার ডিফাইন করা যেটি ইউজার লগইন করা থাকতে হবে অ্যাক্সেস করার জন্য, যেমন আমাদের private_controller।

আমরা নিচের কনসার্ন ফাইল লিখতে পারি:


আমরা এটিকে আমাদের কন্ট্রোলারগুলোতে এরকম ব্যবহার করতে পারি:


যদি একটি ভিজিটর লগইন না থাকে, কিন্তু তারপর /private/index পেজ খুলতে চায়, তারা অটোমেটিক্যালি সাইটের রুটে রিডাইরেক্ট হবেন।

অন্যান্য প্রোভাইডারের সাথে ইন্টিগ্রেশন

আপনি Auth0-এর মাধ্যমে একাধিক প্রোভাইডার 믿을 수 있습니다। তবে, Google ডিফল্ট হিসেবে ডিফাইন করা আছে। অনেক কোম্পানির জন্য, এটিই পর্যাপ্ত।

আপনি যদি আরও প্রোভাইডার দরকার করেন, Auth0-এ সম্পর্কিত টেনান্টের জন্য Authentication মেনুতে যান, এবং তারপর Social সাবমেনুতে, যেখানে আপনি অতিরিক্ত প্রোভাইডার সেট আপ করতে পারেন।

এটি মেনশন করার লायक যে আপনি Auth0-র সাথে মাল্টি-ফ্যাক্টর অথেন্টিকেশন (MFA)ও কনফিগার করতে পারেন।

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

অথরাইজেশনের দিকে খোলা

এখন আমরা ইউজার অথেন্টিকেট করতে পারি এবং তাদের ইনফরমেশন আমাদের অ্যাপ্লিকেশনে একটি কলব্যাকের মাধ্যমে পাঠাতে পারি। আমরা ইতিমধ্যে দেখেছি কীভাবে একটি ইউজারের ইমেইল অ্যাড্রেস হ্যাশ থেকে বের করে আমাদের ডাটাবেসে প্রাসঙ্গিক ইউজার খুঁজে বের করতে হয়।

সেখান থেকে, আমরা অথরাইজেশন পলিসি ডিফাইন করতে পারি।

Pundit অথরাইজেশন পলিসি ডিফাইন এবং ব্যবহার করার একটি চমৎকার পছন্দ, যেটি একটি ইউজারের রোল চেক করার ওপর নির্ভর করে।

role অ্যাট্রিবিউট ব্যবহার করা, সত্যিই, সবচেয়ে সহজ পদ্ধতি। আপনি রেলস কনসোলে বা আপনার অ্যাপ্লিকেশনের ব্যাক-এন্ড ইন্টারফেসে ইউজার তৈরি করার সময় এটিকে ফিল ইন করতে পারেন, একজন ইউজারের প্রথম লগইন অ্যাটেম্পটের আগে।

অথবা আপনি অ্যাডমিনদের ইমেইল লিস্ট পেতে পারেন এবং ইউজার তৈরি করার সময় ইউজারের ইমেইল সেটির সাথে ম্যাচ করতে পারেন।


এবং এটিই!

আমরা যা কভার করেছি

এই আর্টিকেলে, আমরা সেট আপ করেছি:

  • Auth0-এ একটি টেনান্ট এবং অ্যাপ্লিকেশন
  • একটি Ruby on Rails অ্যাপ্লিকেশনে Auth0-রিলেটেড জেম
  • অ্যাপ্লিকেশনে রাউট এবং ভিউ

তারপর আমরা:

  • সেশন কনসেপ্ট রিভিউ করেছি এবং কীভাবে ব্যবহার করবেন সেটি দেখেছি
  • চেক করার জন্য বেস টুলিং তৈরি করেছি একজন ইউজার লগইন করা আছে কিনা
  • একটি কন্ট্রোলার কনসার্ন যোগ করেছি কন্ট্রোলার সিকিউর করতে লগইন রিকোয়ারমেন্টের পেছনে
  • দেখেছি কীভাবে ইউজারদের তাদের রোলের সাথে ম্যাচ করাতে হয়

Auth0 এবং অন্যান্য অথেন্টিকেশন প্রোভাইডার আপনাকে স্টেট-অফ-দ্য-আর্ট অথেন্টিকেশন ইন্টিগ্রেট করতে সাহায্য করতে পারে আপনার Ruby on Rails অ্যাপ্লিকেশনে অনেক কোড লিখতে ছাড়া। এটি প্রায়শই আপনার নিজস্ব অথেন্টিকেশন লেয়ার ইমপ্লিমেন্টেশনের চেয়ে বা Devise-এর মতো জেম ব্যবহার করার চেয়ে অনেক ভালো অপশন।

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

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

Ruby on Rails-এ Auth0 দিয়ে অথেন্টিকেশন স্ট্রিমলাইন: একটি বিগিনার্স গাইড

Thomas Riboulet

আমাদের অতিথি লেখক Thomas ফ্রান্স-ভিত্তিক একটি কনসাল্টেন্ট ব্যাকএন্ড এবং ক্লাউড ইনফ্রাস্ট্রাকচার ইঞ্জিনিয়ার। ১৩ বছরের বেশি সময় সে স্টার্টআপ এবং কোম্পানিগুলোর সাথে কাজ করেছেন তাদের টিম, প্রোডাক্ট, এবং ইনফ্রাস্ট্রাকচার স্কেল করতে। তিনি ফ্রান্সের GNU/Linux ম্যাগাজিনে এবং তার ব্লগে কয়েকবার পাবলিশ হয়েছেন।

Thomas Riboulet-এর সকল আর্টিকেল


  1. জাভাস্ক্রিপ্টে RegExp অবজেক্ট

  2. জাভাস্ক্রিপ্টে একই অ্যারেতে অ্যারের এলিমেন্টগুলো ডুপ্লিকেট করা

  3. Matplotlib-এ শর্ত সত্য হলে একটি বারের কালার কীভাবে পরিবর্তন করবেন?

  4. C++-এ BST থেকে ফ্লোর এবং সিলিং মান বের করা