Главная
Создание системы аутентификации в 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.

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


© www.aurov.com - Личный сайт Александра Юрова 2008 All rights reserved
Tags
adddoctemplate coletemplateserver corresponding будет emailgrabber ones action cache 58e63184 фокус помощью bridges display todo wndstatusbar immediately onselchanged очередь Отображение create ondocumentcomplete выше идентификатор technoweenie handler myisam changecurrentbase information Добавляем insertitem

Joomla Modul

Главная
Статьи
Творчество
Галерея
Кто он-лайн
Сейчас на сайте:
Гостей - 19
Jx Random Quote
"We cannot let terrorists and rogue nations hold this nation hostile or hold our allies hostile." -- George W. Bush