Jx Random Quote

Give me a long enough lever and I'll move the world. Give me enough string, sash pulleys and door closers and I'll mount EFX for you. -- Kit Lane
Главная arrow Статьи arrow Создание системы аутентификации в Ruby on Rails с помощью pluginа acts_as_authenticated
Создание системы аутентификации в Ruby on Rails с помощью pluginа acts_as_authenticated Версия в формате PDF Версия для печати Отправить на e-mail
Практически любое современное  более менее крупное  Web приложение,  использует систему аутентификации. Здесь мы научимся создавать такого рода вещи самостоятельно в проектах Ruby on Rails. Для этого воспользуемся  pluginом  acts_as_authenticated. Во фреймворке Ruby on Rails plugin – это расширения или дополнения возможностей Ruby on Rails. То бишь это некий код, который можно установить и использовать в проекте, чтобы получить доступ к некоторому количеству дополнительных возможностей. Далее описываем последовательность действий пошагово.
1.    Вначале создадим  новый проект c помощью командной строки:
rails  myproject
C:>rails myproject
      create
      create  app/controllers
      create  app/helpers
      create  app/models
      create  app/views/layouts
      create  config/environments
      create  components
      create  db
      create  doc
      create  lib
      create  lib/tasks
      create  log
      create  public/images
      create  public/javascripts
      create  public/stylesheets
      create  script/performance
      create  script/process
      create  test/fixtures
      create  test/functional
      create  test/integration
      create  test/mocks/development
      create  test/mocks/test
      create  test/unit
      create  vendor
      create  vendor/plugins
      create  tmp/sessions
      create  tmp/sockets
      create  tmp/cache
      create  tmp/pids
      create  Rakefile
      create  README
      create  app/controllers/application.rb
      create  app/helpers/application_helper.rb
      create  test/test_helper.rb
      create  config/database.yml
      create  config/routes.rb
      create  public/.htaccess
      create  config/boot.rb
      create  config/environment.rb
      create  config/environments/production.rb
      create  config/environments/development.rb
      create  config/environments/test.rb
      create  script/about
      create  script/breakpointer
      create  script/console
      create  script/destroy
      create  script/generate
      create  script/performance/benchmarker
      create  script/performance/profiler
      create  script/process/reaper
      create  script/process/spawner
      create  script/process/inspector
      create  script/runner
      create  script/server
      create  script/plugin
      create  public/dispatch.rb
      create  public/dispatch.cgi
      create  public/dispatch.fcgi
      create  public/404.html
      create  public/500.html
      create  public/index.html
      create  public/favicon.ico
      create  public/robots.txt
      create  public/images/rails.png
      create  public/javascripts/prototype.js
      create  public/javascripts/effects.js
      create  public/javascripts/dragdrop.js
      create  public/javascripts/controls.js
      create  public/javascripts/application.js
      create  doc/README_FOR_APP
      create  log/server.log
      create  log/production.log
      create  log/development.log
      create  log/test.log
 
             После этого, нам нужно отредактировать файл конфигурации базы данных. Он находиться как обычно в директории «/config» и называется «database.yml» .  Там мы увидим наст ройки баз данных,  примерно такого вида:
 
# And be sure to use new-style password hashing: 
#   http://dev.mysql.com/doc/refman/5.0/en/old-client.html 
development:
  adapter: mysql
  database: myproject_development
  username: root
  password: 123
  host: localhost
# Warning: The database defined as 'test' will be erased and 
# re-generated from your development database when you run 'rake'. 
# Do not set this db to the same as development or production. 
test:
  adapter: mysql
  database: myproject_test
  username: root
  password:
  host: localhost
  production:
  adapter: mysql
  database: myproject_production
  username: root
  password:
  host: localhost
 
Здесь надо ввести имя пользователя и пароль к базе данных MySQL , которые используется на текущем компьютере.  Естественно, необходимо создать указанные базы данных или хотя бы одну базу данных. Согласно идеологии Ruby on Rails, проект может использовать 3 базы данных: «_development», «_test» и «_production». Соответственно,  каждая из них используется для разработки проекта, другая для тестирования и последняя, в качестве рабочей.  Создадим  базу «myproject_development».
   Теперь  нужно создать какой-нибудь  работающий код, например, модуль   «Meeting», в который нам нужно будет заходить с использованием авторизации. Сперва делаем таблицу «meetings». Чтобы  не заморачиваться,  пусть она будет очень простая.
CREATE TABLE `meetings` (
  `id` int(11) unsigned NOT NULL auto_increment,
  `title` varchar(100) default NULL,
  `date` datetime default '0000-00-00 00:00:00',
  `status` varchar(50) default NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
 
В командной строке набираем:
 
C:>cd myproject
C:myproject>ruby script/generate scaffold Meeting
      exists  app/controllers/
      exists  app/helpers/
      create  app/views/meetings
      exists  app/views/layouts/
      exists  test/functional/
   dependency  model
      exists    app/models/
      exists    test/unit/
      exists    test/fixtures/
      create    app/models/meeting.rb
      create    test/unit/meeting_test.rb
      create    test/fixtures/meetings.yml
      create  app/views/meetings/_form.rhtml
      create  app/views/meetings/list.rhtml
      create  app/views/meetings/show.rhtml
      create  app/views/meetings/new.rhtml
      create  app/views/meetings/edit.rhtml
      create  app/controllers/meetings_controller.rb
      create  test/functional/meetings_controller_test.rb
      create  app/helpers/meetings_helper.rb
      create  app/views/layouts/meetings.rhtml
      create  public/stylesheets/scaffold.css
С помощью утилиты «scaffold» мы легко создаем базовый интерфейс с основными функциями для работы с данными: просмотр, редактирование, удаление.
Затем, запускаем наш Webrick сервер и заходим сюда:
http://localhost:3000/meetings/ 
Здесь создаем новую запись в нашей таблице  «meetings» с помощью имеющейся формы. Далее, мы  здесь остановимся и перейдем к системе аутентификации.
Итак, с подготовкой проекта мы закончили. Теперь переходим непосредственно к установке нужного нам plugina.
2.    Запускаем в командной строке:
C:myproject>ruby script/plugin install http://svn.techno-weenie.net/projects/pl 
ugins/acts_as_authenticated/
 
+ ./acts_as_authenticated/CHANGELOG
+ ./acts_as_authenticated/README
+ ./acts_as_authenticated/generators/authenticated/USAGE
+ ./acts_as_authenticated/generators/authenticated/authenticated_generator.rb
+ ./acts_as_authenticated/generators/authenticated/templates/authenticated_syste
m.rb
+ ./acts_as_authenticated/generators/authenticated/templates/authenticated_test_
helper.rb
+ ./acts_as_authenticated/generators/authenticated/templates/controller.rb
+ ./acts_as_authenticated/generators/authenticated/templates/fixtures.yml
+ ./acts_as_authenticated/generators/authenticated/templates/functional_test.rb
+ ./acts_as_authenticated/generators/authenticated/templates/helper.rb
+ ./acts_as_authenticated/generators/authenticated/templates/index.rhtml
+ ./acts_as_authenticated/generators/authenticated/templates/login.rhtml
+ ./acts_as_authenticated/generators/authenticated/templates/migration.rb
+ ./acts_as_authenticated/generators/authenticated/templates/model.rb
+ ./acts_as_authenticated/generators/authenticated/templates/signup.rhtml
+ ./acts_as_authenticated/generators/authenticated/templates/unit_test.rb
+ ./acts_as_authenticated/generators/authenticated_mailer/USAGE
+ ./acts_as_authenticated/generators/authenticated_mailer/authenticated_mailer_g
enerator.rb
+ ./acts_as_authenticated/generators/authenticated_mailer/templates/activation.r
html
+ ./acts_as_authenticated/generators/authenticated_mailer/templates/notifier.rb
+ ./acts_as_authenticated/generators/authenticated_mailer/templates/notifier_tes
t.rb
+ ./acts_as_authenticated/generators/authenticated_mailer/templates/observer.rb
+ ./acts_as_authenticated/generators/authenticated_mailer/templates/signup_notif
ication.rhtml
+ ./acts_as_authenticated/install.rb
acts_as_authenticated generator
====
 
DEPRECATED: Use restful_authentication instead.  Or, ask me for commit rights if
 you wish to maintain this plugin.
 
This is a basic authentication generator for rails, very much in the spirit of x
al's original Login Generator. 
 
To use:
 
  ./script/generate authenticated user account
 
This generates a basic user model, a controller, some basic views, and tests.  E
xtra functionality can be unlocked by
removing the comments for them.  I have a few examples such as user activation a
nd reversible encrypted passwords.
 
The user migration is also generated unless you pass --skip-migration.
 
Generate your mailer:
 
  ./script/generate authenticated_mailer user
 
Consult the Acts As Authenticated wiki for more: http://technoweenie.stikipad.co 
m/plugins/show/Acts+as+Authenticated
 
Команда    «ruby script/plugin install http://svn.techno-weenie.net/projects/plugins/acts_as_authenticated/»  
устанавливает plugin в наш проект. При этом генерируются практически все необходимые файлы, которые будут использоваться в системе аутентификации.  Теперь нам нужно создать саму систему – модель- представление – контролер с помощью команды « ruby script/generate authenticated user account» в командной строке.
 
C:myproject>ruby script/generate authenticated user account
      exists  app/models/
      exists  app/controllers/
      exists  app/helpers/
      create  app/views/account
      exists  test/functional/
      exists  test/unit/
      create  app/models/user.rb
      create  app/controllers/account_controller.rb
      create  lib/authenticated_system.rb
      create  lib/authenticated_test_helper.rb
      create  test/functional/account_controller_test.rb
      create  app/helpers/account_helper.rb
      create  test/unit/user_test.rb
      create  test/fixtures/users.yml
      create  app/views/account/index.rhtml
      create  app/views/account/login.rhtml
      create  app/views/account/signup.rhtml
      create  db/migrate
      create  db/migrate/001_create_users.rb
 
Далее здесь же создаем рассылку сообщений  для работы с пользователями. Также создается с помощью команды «ruby script/generate authenticated_mailer user».
 
C:myproject>ruby script/generate authenticated_mailer user
      exists  app/models/
      create  app/views/user_notifier
      exists  test/unit/
      create  app/models/user_notifier.rb
      create  app/models/user_observer.rb
      create  test/unit/user_notifier_test.rb
      create  app/views/user_notifier/activation.rhtml
      create  app/views/user_notifier/signup_notification.rhtml
 
Теперь надо сделать таблицу базы данных.  Для этого нужно просто запустить все там же, в командной строке, «rake db:migrate».
C:myproject>rake db:migrate
(in C:/myproject)
== CreateUsers: migrating =====================================================
-- create_table("users", {:force=>true})
   -> 0.5160s
== CreateUsers: migrated (0.5160s) ============================================
 
Утилита «rake» в данном контексте запускает файл  «001_create_users.rb», который расположен как правило, в  папке «/db/migrate».  Он имеет такой  вид:
class CreateUsers < ActiveRecord::Migration
  def self.up
    create_table "users", :force => true do |t|
      t.column :login,                     :string
      t.column :email,                     :string
      t.column :crypted_password,          :string, :limit => 40
      t.column :salt,                      :string, :limit => 40
      t.column :created_at,                :datetime
      t.column :updated_at,                :datetime
      t.column :remember_token,            :string
      t.column :remember_token_expires_at, :datetime
    end
  end
 
  def self.down
    drop_table "users"
  end
end
По сути, это командный скрипт, создающий таблицу в базе данных.  Он аналогичен  такой комнаде SQL.
 
CREATE TABLE `users` (
  `id` int(11) NOT NULL auto_increment,
  `login` varchar(255) default NULL,
  `email` varchar(255) default NULL,
  `crypted_password` varchar(40) default NULL,
  `salt` varchar(40) default NULL,
  `created_at` datetime default NULL,
  `updated_at` datetime default NULL,
  `remember_token` varchar(255) default NULL,
  `remember_token_expires_at` datetime default NULL,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
 
3.    Теперь мы должны отредактировать файл «application.rb»  в папке «app/controllers/»
 
class ApplicationController < ActionController::Base
  # Pick a unique cookie name to distinguish our session data from others' 
  session :session_key => '_myproject_session_id'
  include AuthenticatedSystem
end
Строка « include AuthenticatedSystem» активирует нашу систему аутентификации, загружая ее  при запуске приложения. После этого, нам нужно запустить приложение. В командной строке вводим:
               C:myproject> ruby script/server
После этого,  нужно в браузере открыть такой адрес:
               http://localhost:3000/account/signup 
На этой странице мы увидим форму для регистрации нового пользователя. Ее необходимо заполнить и нажать кнопку. Откроется новая страница со стихотворением канзасского поэтессы , Ellen P. Allerton  « In the Caboose.» (В тамбуре.) Наверное, это любимые стихи разработчика данного plugina. В любом случае, эту страницу нам нужно удалить эту страницу. Вместо нее, лучше использовать в качестве «index.rhtml» форму «login.rhtml»
Кроме этого, нужно отредактировать файл  «account_controller.rb», метод «login»
 
 def login
    return unless request.post?
    self.current_user = User.authenticate(params[:login], params[:password])
    if logged_in?
      if params[:remember_me] == "1"
        self.current_user.remember_me
        cookies[:auth_token] = { :value => self.current_user.remember_token , :expires => self.current_user.remember_token_expires_at }
      end
      redirect_back_or_default(:controller => '/meetings', :action => 'index')
      flash[:notice] = "Logged in successfully"
    end
  end
 
Здесь надо вставить имя нашего контроллера  «account.rb»в методе «login» перенаправление на контроллер « meetings»
  redirect_back_or_default(:controller => '/meetings', :action => 'index')
Теперь он будет выглядеть так:
  def login
    return unless request.post?
    self.current_user = User.authenticate(params[:login], params[:password])
    if logged_in?
      if params[:remember_me] == "1"
        self.current_user.remember_me
        cookies[:auth_token] = { :value => self.current_user.remember_token , :expires => self.current_user.remember_token_expires_at }
      end
      redirect_back_or_default(:controller => '/meetings', :action => 'index')
      flash[:notice] = "Logged in successfully"
    end
  end
Затем нам нужно отредактировать файл контроллера, чтобы запретить вход для посторонних. Для этого нужно ввести такую строку в файл «meetings_controller.rb», расположенный в папке «/app/controllers/» нашего проекта:
 
       class MeetingsController < ApplicationController
         before_filter :login_required
        def index  //далее следуют код метода “index” 
Сохраняем файл и пробуем зайти по адресу: http://localhost:3000/meetings/  Вместо списка видим форму для ввода логина и пароля. Если ввести там все правильно, то  увидим список встреч. Заработало. &#61514;  
Далее нужно отредактировать файл «list.rhtml»  «/app/views/meetings/», чтобы добавить туда опцию выхода из текущего интерфейса. Добавленный код выделен курсивом.
 
<h1>Listing meetings</h1>
 
<% if logged_in? %>
<ul>
<li><%= link_to "Logout", :controller => 'account', :action => 'logout' %></li>
<% end %
</ul>
Now
<table>
  <tr>
  <% for column in Meeting.content_columns %>
    <th><%= column.human_name %></th>
  <% end %>
  </tr>
<% for meeting in @meetings %>
  <tr>
  <% for column in Meeting.content_columns %>
    <td><%=h meeting.send(column.name) %></td>
  <% end %>
    <td><%= link_to 'Show', :action => 'show', :id => meeting %></td>
    <td><%= link_to 'Edit', :action => 'edit', :id => meeting %></td>
    <td><%= link_to 'Destroy', { :action => 'destroy', :id => meeting }, :confirm => 'Are you sure?', :method => :post %></td>
  </tr>
<% end %>
</table>
 
<%= link_to 'Previous page', { :page => @meeting_pages.current.previous } if @meeting_pages.current.previous %>
<%= link_to 'Next page', { :page => @meeting_pages.current.next } if @meeting_pages.current.next %>
 
<br />
 
<%= link_to 'New meeting', :action => 'new' %>
На этом мы закончили с базовой часть системы аутентификации. Далее мы улучшим и расширим ее.
4.    Теперь  нам необходимо  сделать регистрацию пользователей. Для начала отредактируем наш обновленный « index.rhtml» « /app/views/account/». Нам нужно добавить туда ссылку на регистрацию новых пользователей. После этой процедуры, вид у этого файла будет такой:
<% form_tag do -%>
<p><label for="login">Login</label><br/>
<%= text_field_tag 'login' %></p>
 
<p><label for="password">Password</label><br/>
<%= password_field_tag 'password' %></p>
 
<p><label for="remember_me">Remember me:</label> // Эта опция закомментирована,  
                                                                                                    //но мы можем ее открыть, чтобы     
                                                                                                     // система запоминала нас 
<%= check_box_tag 'remember_me' %></p>
<p>Not a member yet?
<%= link_to 'Click Here', :action => 'signup' %> to sign up today!</p>
 
<p><%= submit_tag 'Log in' %></p>
<% end -%>
 
Курсивом  отмечен новый код в файле.  Теперь нам  весьма желательно описать новую модель регистрации пользователей.
А. Новый пользователь вводит свой логин, пароль и  е-мейл и жмет кнопку.
B.  Ему отправляется письмо, с просьбой подтвердить его е-мейл.
С. После клика на активационном линке новый пользователь считается зарегистрированным.
Все  выглядит достаточно просто. Но чтобы это заработало,  нам нужно сделать кое-какие изменения в существующем и добавить новый код в наш проект.  Сначала отредактируем наш файл настроек среды,  «environment.rb» «/config». Мы обязаны указать способ отправки сообщений электронной почты.-  config.action_mailer.delivery_method = :sendmail. Эту строку добавляем в самый низ файла. Вид этого файла будет такой:
 
# Be sure to restart your web server when you modify this file. 
 
# Uncomment below to force Rails into production mode when 
# you don't control web/app server and can't set it the proper way 
# ENV['RAILS_ENV'] ||= 'development' 
 
# Specifies gem version of Rails to use when vendor/rails is not present 
RAILS_GEM_VERSION = '1.2.5' unless defined? RAILS_GEM_VERSION
 
# Bootstrap the Rails environment, frameworks, and default configuration 
require File.join(File.dirname(__FILE__), 'boot')
 
Rails::Initializer.run do |config|
  # Settings in config/environments/* take precedence over those specified here 
 
  # Skip frameworks you're not going to use (only works if using vendor/rails) 
  # config.frameworks -= [ :action_web_service, :action_mailer ] 
 
  # Only load the plugins named here, by default all plugins in vendor/plugins are loaded 
  # config.plugins = %W( exception_notification ssl_requirement ) 
 
  # Add additional load paths for your own custom dirs 
  # config.load_paths += %W( #{RAILS_ROOT}/extras ) 
 
  # Force all environments to use the same logger level 
  # (by default production uses :info, the others :debug) 
  # config.log_level = :debug 
 
  # Use the database for sessions instead of the file system 
  # (create the session table with 'rake db:sessions:create') 
  # config.action_controller.session_store = :active_record_store 
 
  # Use SQL instead of Active Record's schema dumper when creating the test database. 
  # This is necessary if your schema can't be completely dumped by the schema dumper, 
  # like if you have constraints or database-specific column types 
  # config.active_record.schema_format = :sql 
 
  # Activate observers that should always be running 
  # config.active_record.observers = :cacher, :garbage_collector 
 
  # Make Active Record use UTC-base instead of local time 
  # config.active_record.default_timezone = :utc 
 
  # Add new inflection rules using the following format 
  # (all these examples are active by default): 
  # Inflector.inflections do |inflect| 
  #   inflect.plural /^(ox)$/i, '\1en' 
  #   inflect.singular /^(ox)en/i, '\1' 
  #   inflect.irregular 'person', 'people' 
  #   inflect.uncountable %w( fish sheep ) 
  # end 
 
  # See Rails::Configuration for more options 
end
 
# Add new mime types for use in respond_to blocks: 
# Mime::Type.register "text/richtext", :rtf 
# Mime::Type.register "application/x-mobile", :mobile 
 
# Include your application configuration below 
ActionMailer::Base.delivery_method = :sendmail  //тип отправки сообщений 
ActionMailer::Base.perform_deliveries = true  //подтверждение доставки 
ActionMailer::Base.raise_delivery_errors = true  //отображение сообщений об ошибках 
ActionMailer::Base.default_charset = "utf-8" //тип кодировки сообщений 
Можно использовать также протокол  SMTP, только для этого надо написать по-другому. Естественно, все настройки должны быть установлены согласно текущей конфигурации SMTP сервера. Описание этой настройки широко представлены в документации по Ruby on Rails.
Теперь нам нужно создать метод класса «user.rb», генерирующий  уникальный набор символов для линка по подтверждения доставки сообщения новому пользователю. Открываем данный файл и пишем:
def do_code
self.activation_code
Digest::SHA1.hexdigest(Time.now.to_s.split(//).sort_by{rand}.join) 
end
Остановимся на нем подробнее .Этот метод создает строку символов, используя  уже нам известный метод  класса «Digest::SHA1.hexdigest» Он включен в класс модели посредством  require 'digest/sha1'.Также мы используем здесь текущее время «Time.now.to_s», сконвертировав его сразу же в строку и иcпользуя символ разделения « //». После чего все сортируется случайными образом и склеивается. «sort_by{rand}.join» 
Теперь надо вставить метод before_create :do_code в начало класса модели «user.rb». При создании нового пользователя  обязательно запустит метод « do_code».
Ранее мы сгенерировали также файлы почтовой рассылки, там нужно открыть файл «user_observer.rb», который следит за всеми действиями, происходящими с моделью User и может производить определенный действия в ответ:
  def after_create(user)
    UserNotifier.deliver_signup_notification(user)
  end
 
  def after_save(user)
    UserNotifier.deliver_activation(user) if user.recently_activated?
  end
 
Эти метод создаются при cсоздании кода  класса обозревателя. Нам ничего здесь писать не нужно. Единственное, что необходимо, это отредактировать файл «environment.rb» и добавть туда:
Rails::Initializer.run do |config|
config.active_record.observers = :user_observer
end
 
Эта строка активирует наш обозреватель с помощью блока, который создает переменную «config» и присваивает ей значение « :user_observer».
5.    Cейчас нам нужно  изменить другой класс, - «user_notifier.rb» в папке «app/controllers/» Там есть 3 метода, которые там находятся в этом классе.
  def signup_notification(user)
    setup_email(user)
    @subject    += 'Please activate your new account'
    @body[:url]  = "http://YOURSITE/account/activate/#{user.activation_code}"
  end
  def activation(user)
    setup_email(user)
    @subject    += 'Your account has been activated!'
    @body[:url]  = "http://YOURSITE/"
  end
  protected
  def setup_email(user)
    @recipients  = "#{user.email}"
    @from        = "ADMINEMAIL"
    @subject     = "[YOURSITE] "
    @sent_on     = Time.now
    @body[:user] = user
  end
Изменения  будут здесь совсем  небольшие:
   def signup_notification(user)
    setup_email(user)
    @subject    += 'Please activate your new account'
    @body[:url]  = "http://localhost:3000 /account/activate/#{user.activation_code}"
  end
  def activation(user)
    setup_email(user)
    @subject    += 'Your account has been activated!'
    @body[:url]  = "http://localhost:3000 /"
  end
  protected
  def setup_email(user)
    @recipients  = "#{user.email}"
    @from        = "SITE ADMIN"
    @subject     = "[MyProject] "
    @sent_on     = Time.now
    @body[:user] = user
  end
Нам нужно также  изменить тексты сообщений, заголовки,  URL нашего сайта и т.д. На конец, снова отредактируем класс метода User «user.rb». Во-первых, надо добавить такой метод:
                      def activate
                    @activated = true
                     update_attributes(:activated_at => Time.now.utc, :activation_code => nil)
                     end
 
Он устанавливает  очень важную булеву  переменную «@activated» в  «true»  и затем обновляет значение поля таблицы базы данных «users» : «activated_at», в который   записывает текущее значение даты и обнуляет значение поля    «activation_code». Последнее нам надо для того, чтобы  мы были уверены, что это поле ничего не содержит.  Еще один метод, который мы здесь добавим, это метод «recently_activated» . Он присутствует в коде класса « UserNotifier»
UserNotifier.deliver_activation(user) if user.recently_activated?
 
                def recently_activated?
                  @activated
                   end
 
 Мы здесь вновь создаем этот метод, использующий переменную   «@activated».  То бишь, мы сможем быть уверены, что активация произошла с помощью метода  «activate» , иначе значение переменной будет «nil» и  дальнейшая проверка не допустит входа в систему не зарегистрированных по правилам пользователей.
И еще напоследок, надо исправить там же метод «self.authenticate»:
 
 
def self.authenticate(login, password)
u = find :first, :conditions => ['login = ? and activated_at IS NOT NULL', login]
u && u.authenticated?(password) ? u : nil
end
 
Вставим в него проверку на активацию пользователя,  о которой говорилось выше, активация должна быть закончена. Это условия входа в систему.
На конец, надо создать новый файл  «welcome.rhtml» в папке  «account/view». Он будет показываться при создании нового пользователя как сообщение:
<div id="welcome">
<h1>Welcome to us</h1>
<p>The activation e-mail message had sent to your e-mail address.</p>
<p>Follow the instructions in it to activate your account</p>
<p>Thanks</p>
</div>
После этого, изменим 1 строку в методе  «signup» класса «Account» - «account_controller.rb» чтобы показывать наш новый файл.
def signup
@user = User.new(params[:user])
return unless request.post?
@user.save!
redirect_back_or_default( :action => 'welcome')
rescue ActiveRecord::RecordInvalid
render :action => 'signup'
end
На этом все. Система закончена и готова к работе.
опубликовано
Добавить новыйПоиск
Добавить комментарий
Имя:
E-mail:
 
Веб-сайт:
Заголовок:
UBB-Код:
[b] [i] [u] [url] [quote] [code] [img] 
 
 
:angry::0:confused::cheer:B):evil::silly::dry::lol::kiss::D:pinch:
:(:shock::X:side::):P:unsure::woohoo::huh::whistle:;):s
:!::?::idea::arrow:
 
Security Image
Пожалуйста, введите проверочный код, который Вы видите на картинке.

Copyright (C) 2007 Alain Georgette / Copyright (C) 2006 Frantisek Hliva. All rights reserved.

 
< Пред.   След. >