加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – 允许未经证实的用户访问需要身份验证的某些页

发布时间:2020-12-17 04:19:49 所属栏目:百科 来源:网络整理
导读:我使用Rails堆栈 设计 监狱长 确认 现在我对未经验证的用户的电子邮件确认和访问提供有一定的要求.假设有3类页面: 案例1 – 不需要身份验证. 案例2 – 需要身份验证,还需要确认用户. 案例3 – 需要身份验证(正确的用户名和密码组合),但无需确认用户访问它们
我使用Rails堆栈

>设计
>监狱长
>确认

现在我对未经验证的用户的电子邮件确认和访问提供有一定的要求.假设有3类页面:

>案例1 – 不需要身份验证.
>案例2 – 需要身份验证,还需要确认用户.
>案例3 – 需要身份验证(正确的用户名和密码组合),但无需确认用户访问它们.

通过设计和确认,实施案例1和案例2是轻而易举的.用户登录/注册后,我会重定向到“确认您的电子邮件页面”.

我的问题是案例3.假设用户进行了登录/注册.他尚未确认他的电子邮件地址,但应该允许访问某些案例3的路线.当他访问案例3路线时,我希望:

>没有重定向
>有效会话

使用确认设计允许确认用户访问所有页面或不允许访问所有页面.它不允许访问具有身份验证但未经确认的某些页面.

我试过压倒设计确认了吗?通过实现这个逻辑:

class ApplicationController < ActionController::Base
   before_filter :verify_user
   def verify_user
       $flag = true if CERTAIN_ROUTES.include?(action_class)
   end
end

class User < ActiveRecord::Base
   def confirmed?
      $flag || !!confirmed_at
   end
end

这几乎不适用于登录,但不适用于注册.而且,这是实现它的极其糟糕的方法.我该如何处理这个问题?其他功能很好.

解决方法

而不是覆盖确认?你可以覆盖confirm_required吗?模型方法 (docs):
# user.rb
class User < ActiveRecord::Base
  protected

  def confirmation_required?
    false
  end
end

之后,您可以自己处理确认逻辑,通过在控制器需要确认时重定向before_action中的所有未确认用户,或者您可以将其拉入授权逻辑(例如,使用权威).

class ApplicationController < ActionController::Base
   def needs_confirmation
     redirect_to root_path unless current_user.confirmed?
   end
end

class SomeController < ApplicationController
  before_action :needs_confirmation
end

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读