Cle clear là một hệ thống xác thực đơn giản với email và mật khẩu được xây dựng bởi nhóm tại Thoughtbot. Nó có các mặc định cố định nhưng nhằm mục đích dễ dàng ghi đè. Hệ thống được bảo trì tích cực và bạn có thể theo dõi trên GitHub.
Trong hướng dẫn này, bạn sẽ thấy cách tích hợp Clearance vào ứng dụng Rails. Chúng tôi sẽ sử dụng một ứng dụng thu nhỏ. Hãy bắt đầu nào!
Bắt đầu
Bạn sẽ bắt đầu bằng cách tạo ứng dụng Rails của mình. Với mục đích của hướng dẫn này, tôi sẽ đặt tên cho tôi là tutsplus-clearance
.
rails new tutsplus-clearance -T
Điều đó sẽ làm nên điều kỳ diệu.
Bạn sẽ cần bootstrap để làm cho ứng dụng của bạn trông đẹp mắt. Thêm đá quý Bootstrap vào Gemfile
của bạn .
#Gemfile ... gem 'bootstrap-sass'
Cài đặt đá quý bằng cách chạy bundle install
.
Bây giờ hãy sửa đổi application
.
scss
trông như thế này:
#app/assets/stylesheets/application.scss @import 'bootstrap-sprockets'; @import 'bootstrap';
Thiết lập giải phóng mặt bằng
Mở Gemfile
của bạn để thêm đá quý Giải phóng mặt bằng.
#Gemfile gem 'clearance'
Bây giờ hãy cài đặt gem.
bundle install
Tại thời điểm này, hãy chạy lệnh trình tạo để cài đặt clearance
.
rails generate clearance:install
Điều này sẽ tạo ra một số đầu ra trên thiết bị đầu cuối của bạn, trông giống như những gì tôi có bên dưới:
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 *******************************************************************************
Khi bạn chạy lệnh, một vài tệp đã được tạo trong ứng dụng của bạn. Một trong những tệp như vậy là clear.rb, bạn có thể tìm thấy tệp này trong config/initializers
danh mục. Một User
mô hình cũng đã được tạo và cùng với đó bạn cũng có một tệp di chuyển trông giống như sau:
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
Theo kết quả đầu ra, điều đầu tiên bạn muốn làm là chỉnh sửa môi trường cấu hình của mình. Để làm điều đó, hãy điều hướng đến config/environments/development.rb
và thêm dòng bên dưới, ngay phía trên end
dấu phân cách.
... config.action_mailer.default_url_options = { host: 'localhost:3000' } end
Tiếp theo, điều hướng đến config/initializers/clearance.rb
để chỉnh sửa nó và khi bạn ở đó, hãy thay đổi địa chỉ email của người gửi từ mặc định thành bất kỳ địa chỉ nào bạn chọn. Đây là những gì bạn sẽ thấy khi mở tệp.
#config/initializers/clearance.rb Clearance.configure do |config| config.mailer_sender = "[email protected]" end
Bạn có thể ghi đè cấu hình mặc định bằng cách dán đoạn mã sau và định cấu hình nó theo yêu cầu của bạn.
#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 = "[email protected]" config.password_strategy = Clearance::PasswordStrategies::BCrypt config.redirect_url = "/" config.secure_cookie = false config.sign_in_guards = [] config.user_model = User end
Chạy lệnh để di chuyển cơ sở dữ liệu của bạn.
rake db:migrate
Mở PagesController
của bạn và thêm một index
hành động.
#app/controllers/pages_controller.rb class PagesController < ApplicationController def index end end
Tiếp theo, tạo một dạng xem cho index
hành động bạn vừa tạo.
Thêm đoạn mã bên dưới:
#app/views/pages/index.html.erb <h1>Tutsplus Clearance</h1> <p>Welcome to our Clearance Page.</p>
Chỉnh sửa các tuyến đường của bạn đến:
#config/routes.rb Rails.application.routes.draw do root to: "pages#index" end
Tạo một phần có tên _navigation.html.erb
bên trong layouts
danh mục. Điều này sẽ được sử dụng để xử lý mọi thứ liên quan đến điều hướng trên ứng dụng của bạn.
Dán mã sau và lưu.
#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>
Quyền truy cập bị hạn chế
Với Cleaner, bạn có thể tạo quyền truy cập hạn chế vào các trang cụ thể mà bạn chọn trong ứng dụng của mình. Hãy xem nó được thực hiện như thế nào.
Tạo chế độ xem cho new
hành động trong app/views/pages
, tên của tệp phải là new.html.erb
. Dán mã bên dưới.
#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>
Bây giờ bạn cần thêm dòng bên dưới vào config/routes.rb
.
#config/routes.rb ... resources :pages, only: :new ...
Cuối cùng, đi tới PagesController
của bạn làm cho nó giống như những gì tôi có bên dưới.
#apps/controllers/pages_controller.rb class PagesController < ApplicationController before_action :require_login, only: [:new] def index end def new end end
Trong đoạn mã trên, chúng tôi đang sử dụng trình trợ giúp Xóa, require_login
, để hạn chế quyền truy cập vào new
hoạt động. Để xem nó hoạt động như thế nào, hãy khởi động máy chủ rails của bạn bằng cách chạy rails server
từ thiết bị đầu cuối của bạn. Trỏ trình duyệt của bạn tới https://locahost:3000/pages/new
và nó sẽ chuyển hướng bạn đến trang đăng nhập.
Giải phóng mặt bằng cũng cung cấp các ràng buộc định tuyến có thể được sử dụng để kiểm soát quyền truy cập.
#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
Trong đoạn mã trên, một tuyến đường khác đã được tạo cho người dùng được xác thực.
Ghi đè mặc định giải phóng mặt bằng
Rất nhiều điều xảy ra ở hậu trường khi bạn bắt đầu sử dụng Clearance, những thứ bạn không thể nhìn thấy. Có thể có lúc bạn muốn tùy chỉnh mọi thứ theo cách khác nhau, tùy thuộc vào đặc điểm kỹ thuật của ứng dụng của bạn. Phép xóa cho phép bạn ghi đè cấu hình mặc định đi kèm.
Để ghi đè (hoặc tạo) các tuyến thanh lý, hãy chạy lệnh này từ thiết bị đầu cuối của bạn.
rails generate clearance:routes
Tệp định tuyến của bạn bây giờ sẽ trông giống như sau:
#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
Lệnh này cũng sẽ đặt config.routes
đặt thành false trong config/initializers/clearance.rb
của bạn tập tin. Điều này có nghĩa là tệp tùy chỉnh vừa được tạo sẽ được sử dụng.
Để tạo các chế độ xem để sửa đổi, hãy chạy:
rails generate clearance:views
Một số tệp sẽ được tạo bao gồm:
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
Bạn sẽ thấy lời nhắc trong thiết bị đầu cuối yêu cầu ghi đè app/views/layouts/application.html.erb
của bạn tập tin. Chọn tùy chọn bạn muốn.
Bố cục
Theo mặc định, Clearance sử dụng bố cục mặc định của ứng dụng của bạn. Nếu bạn muốn thay đổi bố cục mà Clearance sử dụng khi hiển thị các chế độ xem của nó, chỉ cần chỉ định bố cục trong trình khởi tạo.
Clearance::PasswordsController.layout "my_passwords_layout" Clearance::SessionsController.layout "my_sessions_layout" Clearance::UsersController.layout "my_admin_layout"
Phương pháp người trợ giúp
Giải phóng mặt bằng cung cấp cho bạn các phương thức trợ giúp có thể được sử dụng trong controllers
của bạn , views
và helpers
. Các phương thức này bao gồm signed_in?
, signed_out?
và current_user
. Ví dụ:
<% if signed_in? %> <%= current_user.email %> <%= button_to "Sign out", sign_out_path, method: :delete %> <% else %> <%= link_to "Sign in", sign_in_path %> <% end %>
Kết luận
Việc xác thực có rất nhiều thứ để cung cấp cho bạn khi nói đến xác thực, vì vậy hãy nhớ thử nó trong dự án tiếp theo của bạn. Bạn có thể tìm hiểu thêm bằng cách xem trang GitHub.