Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/53.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails rails,提供密码的视觉反馈,同时保证密码的安全性_Ruby On Rails_Forms - Fatal编程技术网

Ruby on rails rails,提供密码的视觉反馈,同时保证密码的安全性

Ruby on rails rails,提供密码的视觉反馈,同时保证密码的安全性,ruby-on-rails,forms,Ruby On Rails,Forms,我在数据库中存储了一个密码 用户应该能够设置一个新的 我还使用attr_encrypted gem将其存储为加密文本(对称,因为我需要它来连接到其他服务,而不仅仅是登录),但这是另一回事 当我显示表单时,出于明显的安全原因,ruby helpers的默认行为是不将密码发送回浏览器 代码如下: <%= f.input :app_password, :as => :password %> :密码%> 这种行为可能还可以,但也会产生一些问题 如果用户使用空密码保存表单,密码将被

我在数据库中存储了一个密码
用户应该能够设置一个新的
我还使用attr_encrypted gem将其存储为加密文本(对称,因为我需要它来连接到其他服务,而不仅仅是登录),但这是另一回事
当我显示表单时,出于明显的安全原因,ruby helpers的默认行为是不将密码发送回浏览器
代码如下:

<%= f.input :app_password, :as => :password %>
:密码%>
这种行为可能还可以,但也会产生一些问题

  • 如果用户使用空密码保存表单,密码将被删除。我应该测试并避免空密码节省,但在某些应用程序中,空密码是可以接受的,这样做可以防止这种可能性
  • 它不会向用户提供关于他或她已编译密码字段这一事实的视觉反馈
  • 它不能很好地进行验证

为了获得最标准的行为(即没有“更改密码”复选框),我在这里有哪些选项?

请在表单中以这种方式包括密码字段:

<%= f.password_field :app_password %>
使用
@user.Authenticate(params[:password])验证您的用户。


在另一个表单中使用3个字段更新密码,即旧密码、密码和密码确认。

首先,我要创建一个单独的表单来更改密码和唯一的密码(不确定您是否需要更改密码,或者您让用户随其他字段一起更改密码)。第二,显然,在那里有密码和密码确认,并检查它们是否匹配。第三,让用户在输入新密码的同时输入现有密码,这样用户就不能在没有任何想法的情况下单击“确定”将其删除。另外,如果您愿意,可以检测一个空的新密码,并询问“您确定吗?”
begin
  self.auth_token = SecureRandom.urlsafe_base64
end while User.exists?(auth_token: self.auth_token)