Clearance হলো Thoughtbot tím-এর তৈরি একটি সহজ প্রমাণীকরণ সিস্টেম যা ইমেইল ও পাসওয়ার্ড দিয়ে কাজ করে। এর মতামতসহ ডিফল্ট সেটিংস রয়েছে কিন্তু সহজে ওভাররাইড করা যায়। সিস্টেমটি সক্রিয়ভাবে রক্ষণাবেক্ষণ করা হয়ে থাকে, এবং আপনি GitHub-এ ফলো আপ করতে পারেন।
এই টিউটোরিয়ালে, আপনি দেখবেন কিভাবে Clearance কে একটি রেইলস অ্যাপ্লিকেশনে ইন্টিগ্রেট করতে হয়। আমরা একটি ছোট অ্যাপ্লিকেশন ব্যবহার করব। চলুন শুরু করি!
শুরু করা
আপনি আপনার রেইলস অ্যাপ্লিকেশন জেনারেট করে শুরু করবেন। এই টিউটোরিয়ালের জন্য আমি আমার অ্যাপের নাম tutsplus-clearance রাখছি।
rails new tutsplus-clearance -T
এটি কাজ করবে।
আপনার অ্যাপ্লিকেশন ভালো দেখানোর জন্য বুটস্ট্র্যাপ লাগবে। আপনার Gemfile-এ Bootstrap জেম যোগ করুন।
#Gemfile ... gem 'bootstrap-sass'
bundle install চালিয়ে জেম ইনস্টল করুন।
এখন application.scss কে নিচের মতো মডিফাই করুন:
#app/assets/stylesheets/application.scss @import 'bootstrap-sprockets'; @import 'bootstrap';
Clearance সেট আপ
আপনার Gemfile খুলুন Clearance জেম যোগ করতে।
#Gemfile gem 'clearance'
এখন জেম ইনস্টল করুন।
bundle install
এই পয়েন্টে, clearance ইনস্টল করার জন্য জেনারেটর কমান্ড চালান।
rails generate clearance:install
এটি আপনার টার্মিনালে কিছু আউটপুট জেনারেট করবে, যা নিচের মতো দেখাবে:
create config/initializers/clearance.rb
insert app/controllers/application_controller.rb
create app/models/user.rb
create db/migrate/20161115101323_create_users.rb
*******************************************************************************
Next steps:
1. Configure the mailer to create full URLs in emails:
# config/environments/{development,test}.rb
config.action_mailer.default_url_options = { host: 'localhost:3000' }
In production it should be your app's domain name.
2. Display user session and flashes. For example, in your application layout:
<% if signed_in? %>
Signed in as: <%= current_user.email %>
<%= button_to 'Sign out', sign_out_path, method: :delete %>
<% else %>
<%= link_to 'Sign in', sign_in_path %>
<% end %>
<div id="flash">
<% flash.each do |key, value| %>
<div class="flash <%= key %>"><%= value %></div>
<% end %>
</div>
3. Migrate: rake db:migrate
*******************************************************************************
কমান্ড চালালে আপনার অ্যাপ্লিকেশনে কিছু ফাইল জেনারেট হবে। একটি ফাইল হলো clearance.rb, যা আপনি config/initializers ডিরেক্টরিতে পাবেন। একটি User মডেলও জেনারেট হয়েছে, এবং এর সাথে একটি মাইগ্রেশন ফাইলও আছে যা নিচের মতো দেখে:
class CreateUsers < ActiveRecord::Migration
def change
create_table :users do |t|
t.timestamps null: false
t.string :email, null: false
t.string :encrypted_password, limit: 128, null: false
t.string :confirmation_token, limit: 128
t.string :remember_token, limit: 128, null: false
end
add_index :users, :email
add_index :users, :remember_token
end
end
আউটপুট অনুযায়ী, প্রথমে আপনাকে কনফিগ এনভায়রনমেন্ট এডিট করতে হবে। তার জন্য config/environments/development.rb-এ যান এবং নিচের লাইনটি end ডিলিমিটার-এর ঠিক উপরে যোগ করুন।
...
config.action_mailer.default_url_options = { host: 'localhost:3000' }
end
পরবর্তী, config/initializers/clearance.rb-এ যান এডিট করতে, এবং সেখানে যেতে ডিফল্ট সেন্ডার ইমেইল অ্যাড্রেস আপনার পছন্দমতো যেকোনো একটি দিয়ে পরিবর্তন করুন। ফাইল খুললে আপনি নিচের কোড দেখবেন।
#config/initializers/clearance.rb Clearance.configure do |config| config.mailer_sender = "reply@example.com" end
নিচের কোড স্নিপেট পেস্ট করে ডিফল্ট কনফিগারেশন ওভাররাইড করতে পারেন এবং আপনার প্রয়োজন অনুযায়ী কনফিগার করতে পারেন।
#config/initializers/clearance.rb
Clearance.configure do |config|
config.allow_sign_up = true
config.cookie_domain = ".example.com"
config.cookie_expiration = lambda { |cookies| 1.year.from_now.utc }
config.cookie_name = "remember_token"
config.cookie_path = "/"
config.routes = true
config.httponly = false
config.mailer_sender = "reply@example.com"
config.password_strategy = Clearance::PasswordStrategies::BCrypt
config.redirect_url = "/"
config.secure_cookie = false
config.sign_in_guards = []
config.user_model = User
end
ডাটাবেস মাইгриেট করার কমান্ড চালান।
rake db:migrate
আপনার PagesController খুলুন এবং একটি index অ্যাকশন যোগ করুন।
#app/controllers/pages_controller.rb class PagesController < ApplicationController def index end end
এরপর, আপনি যা তৈরি করেছেন সেই index অ্যাকশনের জন্য একটি ভিউ তৈরি করুন।
নিচের কোড স্নিপেট যোগ করুন:
#app/views/pages/index.html.erb <h1>Tutsplus Clearance</h1> <p>Welcome to our Clearance Page.</p>
আপনার রাউটস এডিট করুন:
#config/routes.rb Rails.application.routes.draw do root to: "pages#index" end
_navigation.html.erb নামে একটি পার্শিয়াল তৈরি করুন layouts ডিরেক্টরির ভিতরে। এটি আপনার অ্যাপ্লিকেশনে নেভিগেশন সংক্রান্ত সব কিছু হ্যান্ডেল করবে।
নিচের কোড পেস্ট করুন এবং সেভ করুন।
#app/views/layouts/_navigation.html.erb
<nav class="navbar navbar-inverse">
<div class="container">
<div class="navbar-header">
<%= link_to 'Tutsplus-Clearance', root_path, class: 'navbar-brand' %>
</div>
<div id="navbar">
<% if signed_in? %>
<ul class="nav navbar-nav">
<li><%= link_to 'Add Page', new_page_path %></li>
</ul>
<% end %>
<ul class="nav navbar-nav pull-right">
<% if signed_in? %>
<li><span><%= current_user.email %></span></li>
<li><%= link_to 'Sign out', sign_out_path, method: :delete %></li>
<% else %>
<li><%= link_to 'Sign in', sign_in_path %></li>
<% end %>
</ul>
</div>
</div>
</nav>
<div class="container">
<% flash.each do |key, value| %>
<div class="alert alert-<%= key %>">
<%= value %>
</div>
<% end %>
</div>
সীমাবদ্ধ অ্যাক্সেস
Clearance দিয়ে, আপনি আপনার অ্যাপ্লিকেশনের নির্দিষ্ট পেজগুলোর অ্যাক্সেস সীমাবদ্ধ করতে পারবেন। চলুন দেখি কীভাবে করা যায়।
app/views/pages-এ new অ্যাকশনের জন্য একটি ভিউ তৈরি করুন, ফাইলের নাম হবে new.html.erb। নিচের কোড পেস্ট করুন।
#app/views/pages/new.html.erb <h1>Restricted Page</h1> <p>This page is restricted to authenticated users, if you can see this it means you are a superstar!</p>
এখন config/routes.rb-এ নিচের লাইনটি যোগ করুন।
#config/routes.rb ... resources :pages, only: :new ...
শেষে, আপনার PagesController-এ যান এবং নিচের মতো করুন।
#apps/controllers/pages_controller.rb class PagesController < ApplicationController before_action :require_login, only: [:new] def index end def new end end
উপরের কোডে, আমরা Clearance হেল্পার require_login ব্যবহার করছি new অ্যাকশনে অ্যাক্সেস সীমাবদ্ধ করতে। কীভাবে কাজ করে দেখতে, টার্মিনাল থেকে rails server চালিয়ে রেইলস সার্ভার শুরু করুন। ব্রাউজারে https://localhost:3000/pages/new যান এবং এটি আপনাকে সাইন ইন পেজে রিডাইরেক্ট করবে।
Clearance রাউটিং কনস্ট্রেইন্টও প্রদান করে যা অ্যাক্সেস কন্ট্রোলের জন্য ব্যবহার করা যায়।
#config/routes.rb
Rails.application.routes.draw do
constraints Clearance::Constraints::SignedOut.new do
root to: 'pages#index'
end
constraints Clearance::Constraints::SignedIn.new do
root to: "pages#new', as: :signed_in_root
end
end
উপরের কোডে, প্রমাণীকৃত ব্যবহারকারীদের জন্য একটি আলাদা রুট তৈরি করা হয়েছে।
Clearance ডিফল্ট ওভাররাইড করা
Clearance ব্যবহার শুরু করলে পেছনের দরজায় অনেক কিছু ঘটে যা আপনি দেখতে পান না। এমন সময় আসতে পারে যখন আপনি আপনার অ্যাপ্লিকেশনের স্পেসিফিকেশন অনুযায়ী জিনিসগুলো আলাদা ভাবে কাস্টমাইজ করতে চান। Clearance আপনাকে ডিফল্ট কনফিগারেশন ওভাররাইড করার অনুমতি দেয়।
Clearance রাউটস ওভাররাইড (বা জেনারেট) করতে টার্মিনাল থেকে এই কমান্ড চালান।
rails generate clearance:routes
আপনার রাউট ফাইল এখন নিচের মতো দেখাবে:
#config/routes.rb
Rails.application.routes.draw do
resources :passwords, controller: "clearance/passwords", only: [:create, :new]
resource :session, controller: "clearance/sessions", only: [:create]
resources :users, controller: "clearance/users", only: [:create] do
resource :password, controller: "clearance/passwords", only: [:create, :edit, :update]
end
get "/sign_in" => "clearance/sessions#new", as: "sign_in"
delete "/sign_out" => "clearance/sessions#destroy", as: "sign_out"
get "/sign_up" => "clearance/users#new", as: "sign_up"
root to: "pages#index"
resources :pages, only: :new
end
কমান্ডটি আপনার config/initializers/clearance.rb ফাইলে config.routes সেটিংকে false সেট করবে। এর মানে হলো কাস্টম ফাইল যা μόলে জেনারেট হয়েছে সেটি ব্যবহার করা হবে।
ভিউ জেনারেট করতে মডিফিকেশনের জন্য, চালান:
rails generate clearance:views
জেনারেট হওয়া কিছু ফাইল:
app/views/passwords/create.html.erb app/views/passwords/edit.html.erb app/views/passwords/new.html.erb app/views/sessions/_form.html.erb app/views/sessions/new.html.erb app/views/users/_form.html.erb app/views/users/new.html.erb config/locales/clearance.en.yml
আপনার টার্মিনালে একটি প্রম্পট আসবে আপনার app/views/layouts/application.html.erb ফাইল ওভাররাইট করতে চাইলে। আপনার পছন্দমতো অপশন বেছে নিন।
লেআউটস
ডিফল্টরূপে, Clearance আপনার অ্যাপ্লিকেশনের ডিফল্ট লেআউট ব্যবহার করে। আপনি যদি চান Clearance তার ভিউ রেন্ডার করার সময় অন্য লেআউট ব্যবহার করুক, তবে সেটি একটি ইনিশিয়ালাইজারে স্পেসিফাই করুন।
Clearance::PasswordsController.layout "my_passwords_layout" Clearance::SessionsController.layout "my_sessions_layout" Clearance::UsersController.layout "my_admin_layout"
হেল্পার মেথডস
Clearance আপনাকে কিছু হেল্পার মেথড দেয় যা আপনি আপনার controllers, views, এবং helpers-এ ব্যবহার করতে পারেন। এই মেথডগুলোর মধ্যে আছে signed_in?, signed_out?, এবং current_user। উদাহরণস্বরূপ:
<% if signed_in? %> <%= current_user.email %> <%= button_to "Sign out", sign_out_path, method: :delete %> <% else %> <%= link_to "Sign in", sign_in_path %> <% end %>
উপসংহার
প্রমাণীকরণের ক্ষেত্রে Clearance আপনাকে অনেক কিছু দিতে পারে, তাই আপনার পরবর্তী প্রজেক্টে এটি টেস্ট করে দেখুন। GitHub পেজ চেক করুন আরও জানতে।