我在rails应用程序中使用authlogic进行身份验证。在用户重置其密码之后,易腐令牌被重置。考虑一下这个案例。一个用户注册了,他忘记激活帐户,他也忘记了密码。所以他重设了密码。由于这个原因,他的激活链接不再有效。所以他不能激活他的账号。当他尝试登录时,他得到一个错误,即帐户未被激活。用户卡住了!
我找到的解决方案是,每次由于帐户未激活的问题而阻止登录时,重新发送激活链接。
现在的问题是,当用户尝试登录时,我需要检查它是什么类型的错误,以便我可以重新发送激活电子邮件。
向您致敬,Pankaj
发布于 2010-07-15 12:23:20
我可以使用@user_session.attempted_record && !@user_session.invalid_password? && !@user_session.attempted_record.active?检查导致错误的条件,而不是检查实际的错误
这是我重新发送激活邮件的完整解决方案(在使用matthook's tutorial设置激活之后):
# /app/controllers/users_sessions_controler.rb
def create
@user_session = UserSession.new(params[:user_session])
if @user_session.save
redirect_back_or_default root_path
elsif @user_session.attempted_record &&
!@user_session.invalid_password? &&
!@user_session.attempted_record.active?
flash[:notice] = render_to_string(:partial => 'user_sessions/not_active.erb', :locals => { :user => @user_session.attempted_record })
redirect_to :action => :new
else
render :action => :new
end
end
# /app/views/user_sessions/_not_active.erb
Sorry, before you can sign in you need to confirm your email address. <%= link_to('Resend confirmation email', resend_activation_users_path(:login => user.login)) %>
# /app/controllers/users_controller.rb
def resend_activation
if params[:login]
@user = User.find_by_login params[:login]
if @user && !@user.active?
@user.deliver_activation_instructions!
flash[:notice] = "Please check your e-mail for your account activation instructions!"
redirect_to root_path
end
end
end
# /config/routes.rb
map.resources :users, :collection => { :resend_activation => :get }发布于 2010-07-07 20:58:13
使用您的数据库捕获注册、激活、重置和其他详细信息。这样你就知道需要采取什么行动了。
发布于 2011-10-22 01:56:51
迈克:
您应该跳过application.rb中已有的筛选器,而不是添加新筛选器
执行此操作的方法是:
skip_before_filter :require_user我希望这对某些人有用。
https://stackoverflow.com/questions/3194372
复制相似问题