【问题标题】:Overriding Devise's parameters覆盖设计的参数
【发布时间】:2017-07-03 10:18:35
【问题描述】:

我只是想修改一下密码参数的值

Devise::SessionsController我当前的代码如下所示:

class Api::V1::SessionsController < Devise::SessionsController

  before_action :override_params, only: [:create]

  private

  def override_params
    params[:user][:password] = '123123123'   
  end

end

在上面的代码中,我正在尝试修改用户密码的值 但是当我尝试登录时,似乎它不会覆盖用户密码参数。我仍然得到我在 URL 上输入的值,而不是我在控制器中被覆盖的值。

【问题讨论】:

  • @MayurShah 这个不同。它为 ActiveRecord 赋值,而不是参数
  • 你试过这样的:user.password = user.password_confirmation = password in override_params

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


【解决方案1】:

这样的东西应该可以工作(未经测试)

class ApplicationController < ActionController::Base
  before_action :configure_permitted_parameters, if: :devise_controller?

  protected

  def configure_permitted_parameters
    devise_parameter_sanitizer.permit(:sign_in) do |user_params|
      u_params = user_params.permit(:username, :email)
      u_params[:password] = '123123123'
      u_params.permit!
    end
  end
end

【讨论】:

  • 感谢此解决方案,但仍然无法修改密码参数的值。我认为设计是用户资源参数,但我不能修改它的值。 :(
  • 您能否提供更多关于您需要什么以及为什么需要它的背景信息?也许还有其他事情可以做
  • 我正在创建一个 API 来解密来自 iOS 应用程序的 API 请求的密码。所以基本上iOS应用程序会将加密密码传递给我,然后我需要解密它。我想将 user[:password] 参数修改为解密密码,但我无法覆盖它的值。解密部分已经在工作了,我在我的 rails 控制台上进行了测试。
  • 所以您使用的是 devise_token_auth,还是只是设计?在这种情况下,您将不得不覆盖 session_controller 中的整个创建操作
  • 我只是在使用设计。
猜你喜欢
  • 2023-03-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多