Clearance — это простая система аутентификации с электронной почтой и паролем, созданная командой Thoughtbot. Он имеет несомненные значения по умолчанию, но его легко переопределить. Система активно поддерживается, и вы можете следить за GitHub .
В этом руководстве вы увидите, как интегрировать Clearance в приложение Rails. Мы будем использовать миниатюрное приложение. Давайте начнем!
Начиная
Вы начнете с генерации вашего Rails-приложения. Для целей этого урока я назову мой tutsplus-clearance
.
1
|
rails new tutsplus-clearance -T
|
Это сделает волшебство.
Вам понадобится начальная загрузка, чтобы приложение выглядело хорошо. Добавьте самоцвет Bootstrap в свой Gemfile
.
1
2
3
4
|
#Gemfile
…
gem ‘bootstrap-sass’
|
Установите драгоценный камень, запустив bundle install
.
Теперь измените application
.
scss
чтобы выглядеть так:
1
2
3
4
|
#app/assets/stylesheets/application.scss
@import ‘bootstrap-sprockets’;
@import ‘bootstrap’;
|
Настройка оформления
Откройте свой Gemfile
чтобы добавить драгоценный камень Clearance.
1
2
3
|
#Gemfile
gem ‘clearance’
|
Теперь установите драгоценный камень.
bundle install
На этом этапе выполните команду генератора, чтобы установить clearance
.
rails generate clearance:install
Это сгенерирует некоторые выходные данные на вашем терминале, которые выглядят так, как показано ниже:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
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.
<% 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
*******************************************************************************
|
Когда вы запустили команду, в вашем приложении было сгенерировано несколько файлов. Одним из таких файлов является оформление .rb, которое вы можете найти в каталоге config/initializers
. Модель User
также была сгенерирована, и вместе с этим у вас также есть файл миграции, который выглядит следующим образом:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
|
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
разделителя.
1
2
3
|
…
config.action_mailer.default_url_options = { host: ‘localhost:3000’ }
end
|
Затем перейдите к config/initializers/clearance.rb
чтобы отредактировать его, и, когда вы будете там, измените адрес электронной почты отправителя по умолчанию на любой другой по вашему выбору. Это то, что вы увидите, когда откроете файл.
1
2
3
4
5
|
#config/initializers/clearance.rb
Clearance.configure do |config|
config.mailer_sender = «[email protected]»
end
|
Вы можете переопределить конфигурацию по умолчанию, вставив следующий фрагмент кода и настроив его в соответствии со своими требованиями.
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
|
#config/initializers/clearance.rb
Clearance.configure do |config|
config.allow_sign_up = true
config.cookie_domain = «.example.com»
config.cookie_expiration = lambda { |cookies|
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
|
Запустите команду для переноса вашей базы данных.
rake db:migrate
Откройте ваш PagesController
и добавьте index
действие.
1
2
3
4
5
6
|
#app/controllers/pages_controller.rb
class PagesController < ApplicationController
def index
end
end
|
Затем создайте представление для только что созданного действия с index
.
Добавьте фрагмент кода ниже:
1
2
3
4
|
#app/views/pages/index.html.erb
<h1>Tutsplus Clearance</h1>
<p>Welcome to our Clearance Page.</p>
|
Измените ваши маршруты на:
1
2
3
4
5
|
#config/routes.rb
Rails.application.routes.draw do
root to: «pages#index»
end
|
Создайте часть с именем _navigation.html.erb
внутри каталога layouts
. Это будет использоваться для обработки всего, что связано с навигацией в вашем приложении.
Вставьте следующий код и сохраните.
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
#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 %>
<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>
|
Ограниченный доступ
С оформлением вы можете создать ограниченный доступ к определенным страницам по вашему выбору в вашем приложении. Посмотрим, как это делается.
Создайте представление для new
действия в app/views/pages
, имя файла должно быть new.html.erb
. Вставьте код ниже.
1
2
3
4
5
|
#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
1
2
3
4
5
|
#config/routes.rb
…
resources :pages, only: :new
…
|
Наконец, перейдите к вашему PagesController
сделайте так, как PagesController
ниже.
01
02
03
04
05
06
07
08
09
10
11
|
#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, запустив rails server
с вашего терминала. Укажите в браузере http://locahost:3000/pages/new
и он должен перенаправить вас на страницу входа.
Оформление также обеспечивает ограничения маршрутизации, которые можно использовать для контроля доступа.
01
02
03
04
05
06
07
08
09
10
11
|
#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
|
В приведенном выше коде для аутентифицированных пользователей был создан другой маршрут.
Переопределение значений по умолчанию
Когда вы начинаете использовать «Распродажу», за кулисами происходит много вещей, которые вы не видите. Может наступить время, когда вы захотите настроить вещи по-разному, в зависимости от спецификации вашего приложения. Разрешение позволяет вам переопределить конфигурацию по умолчанию, с которой он поставляется.
Чтобы переопределить (или сгенерировать) маршруты очистки, запустите эту команду из своего терминала.
rails generate clearance:routes
Ваш файл маршрутов теперь должен выглядеть так:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
|
#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.routes
значение false в файле config/initializers/clearance.rb
config.routes
. Это означает, что будет использоваться только что созданный пользовательский файл.
Чтобы сгенерировать представления для модификации, запустите:
rails generate clearance:views
Некоторые из файлов, которые будут сгенерированы, включают:
1
2
3
4
5
6
7
8
|
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 при визуализации его представлений, просто укажите макет в инициализаторе.
1
2
3
|
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
. Например:
1
2
3
4
5
6
|
<% 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 .