Как стать автором
Обновить

Аутентификация в Rails — плагин jiff_auth

Время на прочтение 3 мин
Количество просмотров 606
Работая над рельсовым проектом мне, естественно, понадобилось сделать аутентификации пользователей. Монополией на это в Rails обладал плагин restful_authentication, который мне не понравился по нескольким причинам:
  • он генерирует много кода
  • он негибок в настройках
  • он сложно интегрируется в существующие модели и контроллеры (надо создавать с нуля)
  • к нему крайне невнятная документация
Исправить перечисленное и стало задачей плагина jiff_auth, который я решил закодить.
Ниже — небольшая инструкция по настройке и использованию.

Интеграция в приложение

Установка

cd vendor/plugins
git clone git://github.com/snitko/jiff_auth.git


Миграции для БД

Вам понадобится добавить следующее:

add_column :users,:password, :string :limit => 40
add_column :users,:password_token, :string, :unique => true, :limit => 20
add_column :users,:password_token_expires, :datetime

Здесь и далее я буду подразумевать, что вы используете модель User, хотя вы можете использовать модель с любым именем, конечно.

Включаем плагин!

В application.rb нужно добавить всего одну строчку, чтобы все заработало:

JiffAuth.configure(:app_controller => self, :auth_controller => :users, :model => :user)

JiffAuth.configure экстендит ApplicationController и классы, указанные в качестве :controller и :model. Кроме того, в configure() есть еще пару любопытных аргументов, которые вам могут пригодиться:

:redirect_on => {
:create => '/login',
:logout => '/login'
},
:render_on => {
:error => 'users/error',
:message => 'users/system-message'
}

Думаю, тут все понятно. Учтите только, что все перечисленные агрументы и так устанавливаются по умолчанию (именно с теми значениями, которые приведены в примере), так что используйте их, если вас не устраивает дефолтное поведение.

И, наконец, настраиваем routes.rb

Вот, что надо добавить в routes.rb:
map.connect 'login', :controller => 'users', :action => 'login'
map.connect 'logout', :controller => 'users', :action => 'logout'
map.connect 'lost-password', :controller => 'users', :action => 'lost_password'
map.connect 'recover-password', :controller => 'users', :action => 'recover_password'
map.connect 'change-password', :controller => 'users', :action => 'change_password'

Само собой, адрес для action-ов можете выбрать какой вам нравится.

Примеры использования в views

Поскольку плагин не предусматривает генерации кода, view вам придется делать самим.
Я покажу примеры шаблонов на двух action-ах — create и login

users/create.erb

Вот как может выглядеть этот шаблон:
<% form_for @user, :method => "post", :html => {:multipart =>; true} do |f| %>
<input type="text" name="user[login]" />
<input type="password" name="user[password]" />
<input type="password" name="user[password_confirmation]" />
<input type="text" name="user[email]" />
<% end %>

Если поле password окажется пустым, плагин сгенерирует пароль сам. Далее, если регистрация проходит успешно, происходит редирект на форму с логином.

users/login.erb

Тут тоже все просто:
<% form_for User.new, :url => 'login', :method => "post", :html => {:multipart => true} do |f| %>
<input type="text" name="user[login]" />
<input type="password" name="user[password]" />
<% end %>

Вместо user[login] можно указать, например user[email] (или любое другое поле, например id), тогда аутентификация будет проходить по паре email/password.

What's more?

На самом деле все написанное здесь + еще много всяких интересных штук — есть в README плагина. Не поленитесь прочесть. Здесь только перечислю еще пару вещей, которые реализованы в плагине:
  • Куки и сессии — само собой. Настраивать ничего не нужно.
  • captcha
  • угадывание названия поля для логина по его содержанию
TODO:
  • OpenID
  • Фильтр вывода параметров запросов в логи (чтобы не светить пароль)

P.S. Приношу извинения за форматирование кода — парсер лох, надо написать администрации.
Теги:
Хабы:
+4
Комментарии 8
Комментарии Комментарии 8

Публикации

Истории

Работа

Ruby on Rails
11 вакансий

Ближайшие события

PG Bootcamp 2024
Дата 16 апреля
Время 09:30 – 21:00
Место
Минск Онлайн
EvaConf 2024
Дата 16 апреля
Время 11:00 – 16:00
Место
Москва Онлайн
Weekend Offer в AliExpress
Дата 20 – 21 апреля
Время 10:00 – 20:00
Место
Онлайн