【问题标题】:access devise user email before create session rails 4在创建会话 rails 4 之前访问设计用户电子邮件
【发布时间】:2016-12-12 19:07:39
【问题描述】:

我正在构建一个 before_filter 来检查设计用户是否接受了最新的条款和条件。

我试图弄清楚如何在允许用户访问该页面之前阻止登录并重定向到我的“接受新条款”页面。

我不知道如何以安全的方式访问电子邮件/密码以找到用户并检查 users.has_expired_terms?

这是我在我的用户上尝试的:会话覆盖控制器

class Users::SessionsController < Devise::SessionsController
  before_action :expired_terms, only: [:create]
  #other filters redacted



  def expired_terms
    redirect_to reauthenticate_terms_path(self.resource) if self.resource.has_expired_terms?
  end

  def create
    self.resource = warden.authenticate!(auth_options)
    sign_in(resource_name, resource)
    yield resource if block_given?
    check_for_token("invite_token", session[:invite_token]) if session[:invite_token].present?
    if session[:invite_token].present?
      [:invite_token].each { |k| session.delete(k) }
    end
    redirect_to after_sign_in_path_for(resource)
  end
end

我确信有一个关于如何做到这一点的最佳做法,但我似乎找不到。

【问题讨论】:

  • 我不知道我会回电。这适用于已经注册但需要重新验证新条款和条件的用户

标签: ruby-on-rails ruby-on-rails-4 devise


【解决方案1】:

您可以为任何已登录的用户添加before_action :redirect_to_accept_terms。所以,也许在你的 ApplicationController 中:

before_action :redirect_to_accept_terms

def redirect_to_accept_terms
  if current_user? && !current_user.accepted_new_terms?
     #redirect to accept new terms
  end
end

此外,无论您决定去哪里,请务必排除处理新术语逻辑的控制器操作:

skip_before_action :redirect_to_accept_terms, only: [:accept_new_terms]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-11
    • 1970-01-01
    • 1970-01-01
    • 2017-08-01
    • 1970-01-01
    相关资源
    最近更新 更多