首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Authlogic:如果用户未登录,如何查找该用户是否未登录

Authlogic:如果用户未登录,如何查找该用户是否未登录
EN

Stack Overflow用户
提问于 2010-07-07 19:49:22
回答 3查看 2.2K关注 0票数 0

我在rails应用程序中使用authlogic进行身份验证。在用户重置其密码之后,易腐令牌被重置。考虑一下这个案例。一个用户注册了,他忘记激活帐户,他也忘记了密码。所以他重设了密码。由于这个原因,他的激活链接不再有效。所以他不能激活他的账号。当他尝试登录时,他得到一个错误,即帐户未被激活。用户卡住了!

我找到的解决方案是,每次由于帐户未激活的问题而阻止登录时,重新发送激活链接。

现在的问题是,当用户尝试登录时,我需要检查它是什么类型的错误,以便我可以重新发送激活电子邮件。

向您致敬,Pankaj

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-07-15 12:23:20

我可以使用@user_session.attempted_record && !@user_session.invalid_password? && !@user_session.attempted_record.active?检查导致错误的条件,而不是检查实际的错误

这是我重新发送激活邮件的完整解决方案(在使用matthook's tutorial设置激活之后):

代码语言:javascript
运行
复制
# /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 }
票数 2
EN

Stack Overflow用户

发布于 2010-07-07 20:58:13

使用您的数据库捕获注册、激活、重置和其他详细信息。这样你就知道需要采取什么行动了。

票数 1
EN

Stack Overflow用户

发布于 2011-10-22 01:56:51

迈克:

您应该跳过application.rb中已有的筛选器,而不是添加新筛选器

执行此操作的方法是:

代码语言:javascript
运行
复制
skip_before_filter :require_user

我希望这对某些人有用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3194372

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档