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

ruby-on-rails – 使用Authlogic时如何编写和测试密码更改?

发布时间:2020-12-17 03:11:39 所属栏目:百科 来源:网络整理
导读:我继承的应用程序具有以下更新用户配置文件的操作: class UsersController ApplicationController # ... def update @user = current_user if @user.update_attributes(params[:user]) flash[:notice] = "Successfully updated profile." redirect_to root_
我继承的应用程序具有以下更新用户配置文件的操作:

class UsersController < ApplicationController
  # ...
  def update
    @user = current_user
    if @user.update_attributes(params[:user])
      flash[:notice] = "Successfully updated profile."
      redirect_to root_url
    else
      flash[:error] = "Hrm,something went wrong."
      render :action => 'edit'
    end
  end
end

PUT(实际上使用_method = PUT POST)到该操作的表单有一个密码和password_confirmation字段,但没有old_password字段.我通过测试注意到我甚至不必填写password_confirmation字段.

第一个问题:使用Authlogic时是否有更成熟的密码更改方式?

第二个问题:是否有关于密码更改的最佳实践(特别是从可用性角度)的文献?它应该是一个单独的表单,而不是与其他用户字段混合使用?

第三个问题:大多数网站都有一个old_password字段,但Authlogic似乎不支持本地.什么是Authlogic-ey方式确认它实际上是用户他/她自己更改密码而不是那些黑客入侵会话的人?

解决方法

第一个答案:Authlogic为您提供框架,但实现取决于您.大多数网站只提供“更改密码”页面,其中仅显示“密码”和“密码确认”字段或“编辑配置文件”页面,该页面允许您更新要在用户记录中更改的字段.根据用户记录中的字段数,您可以选择单独的更改密码页面.您希望表单简短.

至于不需要password_confirmation:

>对于测试,这取决于您如何模拟它或您正在测试的内容……是您正在测试的控制器/表单还是模型?
>是require_password_confirmation true吗? (这是默认值)

第二个答案:你会发现很多可用性标准,但我只是和KISS一起去.从可用性的角度来看,大多数人都对正在运行的工作和已建立的工作感到满意 – 因此请查看Google,Facebook和37signals.很简单的过程.如上所述,简短形式是一个重要的可用性目标.

如果您正在谈论安全要求,那么您最好的选择是PCI Compliance [PDF],其中列出了传输和存储财务记录的若干规则,尽管他们没有提及用户凭据.如果您将相同的规则应用于帐户,就像使用信用卡一样,您将拥有一个非常安全的设置.由于PCI合规性不足以实现,银行是另一个值得关注的重要资源,因为糟糕的会话处理可能导致大量的资金缺失.我的几个银行帐户现在通过高于我的标准密码的图像和安全问题确认我的登录名和密码更改.我也找到了several good articles covering that.

这导致了第三个问题……

第三个答案:在AuthLogic中,只需检查用户的“旧密码”字段,然后再继续在users_controller中进行更新:
@ user.valid_password?(“旧传”)

像这样:

将attr_accessor:old_password添加到您的用户模型

并将您的用户控制器更改为:

def update
    @user = current_user
    if @user.valid_password?(params[:user][:old_password])
      if @user.update_attributes(params[:user].reject{|key,value| key == "old_password"})
        flash[:notice] = 'Successfully updated profile.'
        redirect_back_or_default root_url
      else
        render :action => 'edit'
      end
    else
      flash[:warning] = 'Your old password is WRONG! What is your malfunction!?!'
      render :action => 'edit'
    end
  end

(您可能想要更改警告……)

(编辑:李大同)

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

    推荐文章
      热点阅读