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

ruby-on-rails – Ruby on Rails / Devise – 在重置密码时绕过

发布时间:2020-12-17 04:21:22 所属栏目:百科 来源:网络整理
导读:在我的项目中,我修改了Devise中的注册表单,通过访问者添加:agree选项(用户必须接受注册的服务条款等).如果他们不同意,则不会进行验证. 当用户试图编辑他们的帐户信息时,这导致了一个问题,因为它找到了:同意验证,但我能够添加一个’unless’子句并添加另一
在我的项目中,我修改了Devise中的注册表单,通过访问者添加:agree选项(用户必须接受注册的服务条款等).如果他们不同意,则不会进行验证.

当用户试图编辑他们的帐户信息时,这导致了一个问题,因为它找到了:同意验证,但我能够添加一个’unless’子句并添加另一个名为:signed_in的访问器,它在控制器中定义(我无法’弄清楚如何让模型确定用户是否已登录,设计的助手对我来说不起作用).我的User模型和users_controller的相关部分看起来像……

user.rb

validates :agree,:term_agreement => TRUE,:unless => :signed_in

users_controller.rb

def update
   @user = User.find(params[:id])

   if user_signed_in?
     @user.signed_in = params[:user]
   end

  [...]
end

所以,一切正常……当用户已经登录时,“同意”验证会覆盖.但是,我必须找出覆盖其他方案的最佳方法…当用户重置密码并需要更改时它.

我正在测试用户帐户,并试图在一个帐户上重置我的密码,但是我遇到了:同意验证…现在我必须找到一种方法来覆盖它.我注意到更改密码表单的隐藏字段值为:reset_password_token,但我试过:除非=> :reset_password_token但它不起作用.

那么实现这个目标的最佳方法是什么?除此之外,我怎么能有一个/或条件(除非:signed_in或:reset_password等):except子句?

解决方法

那么,您需要在创建记录时验证术语的接受程度?
class User < ActiveRecord::Base
  validates :agree,:acceptance => true,:on => :create
end

:on => :create只会在创建记录时执行验证 – 就像Brandon的答案一样,但没有冗余代码.

这也可以避免您的控制器担心用户是否已登录.

(编辑:李大同)

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

    推荐文章
      热点阅读