虽然不喜欢这个插件,理由嘛,太老了...但还是要用,过段时间有机会再改吧
具体配置什么之类的,参考前一篇:
用rails实现简单邮件发送测试
http://fireflyman.iteye.com/blog/800955
(1)
ruby script/generate authenticated_mailer user
(2)删除models/user_notifier 里的两个方法:UserNotifier和activation
然后折腾后的代码是这样的--<
class UserNotifier < ActionMailer::Base
@@session = ActionController::Integration::Session.new
#因为url_for是ActionController类控制器的实例方法,所以不能在邮件发送器中直接调用.
#因此我们创建了一个可以调用url_for的ActionController::Integration::Session对象, #并赋值给一个类变量,这样就可以在邮件发送器中任意使用url_for 了
def forgot_password(user)
setup_email(user)
@subject += "Password reset"
@body[:url] = @@session.url_for(:controller => "account",
:action => "reset_password",
:id => user.pw_reset_code,
:only_path => false )
end
protected
def setup_email(user)
@subject = "hello World"
@sent_on = Time.now
@body[:user] = user
@recipients = "#{user.email}"
@from = 'xxx@163.com'
@headers = {}
end
end
(3)在views/user_notifier里创建对应的邮件模板,我的如下==>
Dear:<%= @user.login %>
请点击下面链接地址,以便重设密码:
<%= @url %>
(4)为users表增加pw_reset_code字段,目的是存放一个随机生成的记号,需要把这个记号发给用户.
ruby script/generate migration add_pw_reset_code_to_user
class AddPwResetCodeToUsers < ActiveRecord::Migration
def self.up
add_column :users, :pw_reset_code, :string, :limit => 40
end
def self.down
remove_column :users, :pw_reset_code
end
end
(5) 打开你的user.rb,增加下面两个类方法
def forgot_password
self.password_forgotten = true
create_pw_reset_code
end
def reset_password
update_attributes(:pw_reset_code => nil )
end
protected
def create_pw_reset_code
self.pw_reset_code = Digest::SHA1.hexdigest("secret-#{Time.now}")
end
(6)打开models/user_observer
class UserObserver < ActiveRecord::Observer
def after_save(user)
UserNotifier.deliver_forgot_password(user) if user.password_forgotten
end
end
(7)在environment.rb里加入这句==?
config.active_record.observers = [:user_observer]
(8)在account_controller里加入下面两个方法:
def forgot_password
return unless request.post?
if @user = User.find_by_email(params[:email])
@user.forgot_password
@user.save
flash[:notice] = "An email with instructions for resetting your password has been sent to your email address."
redirect_back_or_default(:controller => "/account")
else
flash.now[:notice] = "Could not find a user with the given email address."
#render :forgot_password
end
end
def reset_password
@page_title = "Reset Password"
@user = User.find_by_pw_reset_code(params[:id]) rescue nil
unless @user
render(:text => "Not found",:status => 404)
return
end
return unless request.post?
if @user.update_attributes(params[:user])
@user.reset_password
flash[:notice] = "Password successfully reset."
redirect_back_or_default(:controller => "/account")
end
(9)到这一步已经没啥好做了,无非就设计两个页面-->自己慢慢改...
forgot_password.rhtml和reset_password.rhtml
<p>Give you email address and we'll send your instructions on how tou create a new one.</p>
<% form_for :user do |f| %>
<p><label for="email">Email:</label><br/>
<%= text_field_tag :email %><br />
<%= submit_tag "Submit" %>
<% end %>
<%= error_messages_for :user %>
<% form_for :user do |f|%>
<p>Password:<br/>
<%= password_field :user,:password %></p>
<p>Confirm password:<br/>
<%= password_field :user,:password_confirmation %></p>
<p><%= submit_tag "Submit"%></p>
<% end %>
好了,经测试,是可以的..这只是一个笔记记录,用上就用,用不上别骂..
分享到:
相关推荐
2. **配置**:在`config/initializers/acts_as_authenticated.rb`中,你可以设置一些选项,如密码最小长度、哈希算法等。 3. **迁移**:acts_as_authenticated可能需要创建或修改数据库表,你需要运行相应的数据库...
acts_as_list.raracts_as_list.raracts_as_list.raracts_as_list.raracts_as_list.raracts_as_list.raracts_as_list.raracts_as_list.raracts_as_list.raracts_as_list.raracts_as_list.raracts_as_list.raracts_as_...
acts_as_list, 用于管理列表的ActiveRecord插件 ActsAsList描述这个 acts_as 扩展提供了对列表中的多个对象进行排序和重新排序的功能。 具有指定的类的类需要在映射的数据库表上定义为整数的position 列。 0.8.0升级...
"acts_as_paranoid" 是一个在Ruby on Rails框架中常用的gem,用于处理数据库记录的软删除(soft delete)。在数据库操作中,通常我们会遇到删除数据的需求,但直接删除可能会导致数据丢失,尤其是在生产环境中。...
在Ruby on Rails框架中,`acts_as_rateable`是一个非常实用的插件,它允许用户对模型进行评分,从而实现简单的打分功能。这个插件是Rails社区中的一个开源项目,旨在简化应用中的评分系统集成。在本篇讨论中,我们将...
acts_as_nested_set是Rails社区中广泛使用的Nested Set库,而BetterNestedSet则是它的增强版,提供了更多功能和优化。本文将深入探讨BetterNestedSet的原理、用法以及相较于acts_as_nested_set的优势。 1. Nested ...
#ActsAsCategory acts_as_category (Version 2.0 beta)acts_as_category,是acts_as插件在acts_as_tree风格的Ruby on Rails的ActiveRecord的模式,但有一些额外的功能,以及多种便捷视图助手。例子(有关实例方法和...
介绍插件,用于对记录进行排序(使用 gem)安装要启用rails_admin_acts_as_list,请将以下内容添加到您的Gemfile : gem 'rails_admin_acts_as_list'gem 'rails_admin' 重要提示: rails_admin_acts_as_list之前必须...
Api-acts_as_api.zip,使在rails中创建api响应变得简单和有趣,一个api可以被认为是多个软件设备之间通信的指导手册。例如,api可用于web应用程序之间的数据库通信。通过提取实现并将数据放弃到对象中,api简化了编程...
就像acts_as_list 一样,但不必使用非标准方法调用(如insert_at)来弄乱您的代码,acts_as_restful_list 使管理列表变得简单。 您可以像更新其他任何内容一样更新 position 属性,其余的都由您来处理。 特点 通过...
已知的问题在同一模型上使用acts_as_paranoid和ActiveStorage 。 您不能直接以已删除状态创建模型,也不能在删除后更新模型。用法安装gem: gem 'acts_as_paranoid' , '~> 0.7.0' bundle install创建迁移bin/rails ...
active_record-acts_as, 模拟activerecord模型的多表继承 插件开发已经移动这个项目的积极发展已经转移到了的krautcomputing fork 。 请在那里报告问题并打开 PRs ! ActiveRecord::ActsAs这是对 acts_as_relation的...
gem 'acts_as_liked' 然后执行: $ bundle 运行生成器: $ rails generate acts_as_liked 并且不要忘记迁移您的数据库 $ rake db:migrate 用法 可爱的模特 将acts_as_likeable添加到任何模型,它的实例可以被...
与acts_as_commentable 兼容(但需要更改数据库架构) 要求 此 gem 的 2.x 版本仅适用于 Rails 4 及更高版本。 对于此 gem 的 Rails 3.x 兼容版本,请使用版本 1.2.0。 这个宝石取决于 CollectiveIdea 的 Awesome ...
使用acts_as_aliased在模型中启用别名: model Company < ActiveRecord::Base acts_as_aliased end 这假设您的公司模型中有一个名为name的列。 您可以通过传递column参数来指定不同的column : model ...
gem 'acts_as_commentable' Rails gem 'acts_as_commentable' , '3.0.1' Rails gem 'acts_as_commentable' , git: 'git@github.com:jackdempsey/acts_as_commentable.git' , branch: '2.x' 生成器 Rails 3+ ...
acts_as_xapian将Xapian的强大功能与Rails的优雅集成,使得开发者能够在Rails应用中轻松实现全文搜索功能。 该插件的主要特性包括: 1. **无缝集成**:acts_as_xapian能够无缝地与Rails模型集成,只需在模型中添加...
acts_as_shopping_cart 一个简单的购物车实现。 您可以找到示例应用程序。 安装 滑轨3 从0.2.0版开始,不再支持Rails 3。 如果您仍需要在Rails 3应用程序中实现此gem,请使用0-1-x分支 将其包含在您的Gemfile中 ...
ActiveRecord::Base acts_as_reference_dataend假设已创建迁移以使用各种类型填充此表,例如SMS或EMAIL 。 这允许我们使用来自代码库的一致指针来引用这些数据库对象: if criteria_type == :mobile_number send_...
这个gem的使用很简单,你只需要在我们想要的带有实时索引的模型中执行acts_as_realtime方法,该方法可以携带一系列参数来稍微修改行为和其他强制性参数,但这些将是后面解释了,另外一步就是在视图中插入必要的代码...