【问题标题】:How to Encrypt data after validation in Ruby on Rails?如何在 Ruby on Rails 中验证后加密数据?
【发布时间】:2014-11-13 11:24:44
【问题描述】:

我正在使用设备进行身份验证,请注册。现在我想以加密格式将 emailId 保存在 MySQL 中。所以我使用 gem 'aescrypt'。

我的控制器:

 def create
    @dashboard_user = DashboardUser.new(dashboard_user_params)
    @dashboard_user.created_by=current_dashboard_user.username
    @dashboard_user.company_id=current_dashboard_user.company_id
    active_ind = ""
    email = @dashboard_user.email

    if params["active"] == nil then
      active_ind = "0"
    else
      active_ind = "1"
    end

    @dashboard_user.active = active_ind
    @dashboard_user.email= AESCrypt.encrypt(email, "password")

    respond_to do |format|
      if @dashboard_user.save
        format.html { flash[:notice] = 'User successfully Created.' and redirect_to action: "index"}
      else
        @dashboard_user.email = email
        format.html { render :new }
      end
    end
  end

当我尝试保存用户时,它会抛出电子邮件无效。我删除了模型中电子邮件的验证。即使存在相同的错误。 这是什么问题? 验证后是否有任何方法可以加密数据?

提前致谢。

【问题讨论】:

  • 你能发布你的 DashboardUser 类的 sn-p 吗? config/initializers/devise.rb 中的 auth 键是什么?
  • config.authentication_keys = [:username]@Novae

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


【解决方案1】:

您如何验证电子邮件? 在验证(例如)正则表达式之前,您可以使用自定义方法对其进行解密。 或者,您可以使用ActiveRecord Callbacks。在您的情况下,after_validation 可能很有用:)

after_validation(on: :create) do
  self.email= AESCrypt.encrypt(email, "password")
end

【讨论】:

  • DashboardUsersController:Class 的未定义方法 `after_validation'
  • 我想在哪里定义?
  • 哦不,是一个 Active::Record 方法!你应该把它放在你的模型中,而不是控制器中:)!放入DashboardUser
  • 如何在视图中解密?
  • 不客气 :)。请记住,下次您从数据库中获取记录时,密码将已加密。所以验证可能会失败。您应该仅在创建期间对其进行验证,只需将on: :create 作为参数添加到validates :email(您现在可以重新启用
【解决方案2】:

您可以使用由after_validation 回调触发的方法来加密数据。这里有描述:http://api.rubyonrails.org/classes/ActiveRecord/Callbacks.html

【讨论】:

    猜你喜欢
    • 2011-07-04
    • 2018-10-24
    • 1970-01-01
    • 2013-01-04
    • 2019-02-08
    • 1970-01-01
    • 2019-05-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多