Работая над рельсовым проектом мне, естественно, понадобилось сделать аутентификации пользователей. Монополией на это в Rails обладал плагин restful_authentication, который мне не понравился по нескольким причинам:
Ниже — небольшая инструкция по настройке и использованию.
Здесь и далее я буду подразумевать, что вы используете модель User, хотя вы можете использовать модель с любым именем, конечно.
JiffAuth.configure экстендит ApplicationController и классы, указанные в качестве :controller и :model. Кроме того, в configure() есть еще пару любопытных аргументов, которые вам могут пригодиться:
Думаю, тут все понятно. Учтите только, что все перечисленные агрументы и так устанавливаются по умолчанию (именно с теми значениями, которые приведены в примере), так что используйте их, если вас не устраивает дефолтное поведение.
Само собой, адрес для action-ов можете выбрать какой вам нравится.
Я покажу примеры шаблонов на двух action-ах — create и login
Если поле password окажется пустым, плагин сгенерирует пароль сам. Далее, если регистрация проходит успешно, происходит редирект на форму с логином.
Вместо user[login] можно указать, например user[email] (или любое другое поле, например id), тогда аутентификация будет проходить по паре email/password.
P.S. Приношу извинения за форматирование кода — парсер лох, надо написать администрации.
- он генерирует много кода
- он негибок в настройках
- он сложно интегрируется в существующие модели и контроллеры (надо создавать с нуля)
- к нему крайне невнятная документация
Ниже — небольшая инструкция по настройке и использованию.
Интеграция в приложение
Установка
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
- угадывание названия поля для логина по его содержанию
- OpenID
- Фильтр вывода параметров запросов в логи (чтобы не светить пароль)
P.S. Приношу извинения за форматирование кода — парсер лох, надо написать администрации.