我得到这个错误:"param丢失或值为空:user"当我试图在我的应用程序中创建对用户设置页面的密码限制访问时。所有登录的用户都可以看到一个选项卡来更改他们的双因素设置页面。当他们点击双因素设置的选项卡时,他们需要输入该帐户的密码。我已经创建了一个用于密码输入的页面。然而,我不断地得到上面的错误。
以下是在two_factor_settings_controller.rb 中定义的控制器方法
def authorization_check_for_2fa
@user = current_user
prompt_for_password(current_user)
if authorization_check_params[:password].present?
debugger
if current_user.valid_password?(authorization_check_params[:password])
flash.now[:success] = "Yay correct password"
redirect_to two_factor_settings_path
else
flash.now[:alert] = "Sorry, wrong password"
end
end
end
这些是控制器中的私有方法:
def prompt_for_password(user)
@user = user
session[:otp_user_id] = user.id
render authorization_check_for_2fa_two_factor_settings_path
end
def authorization_check_params
params.require(:user).permit(:password)
end
查看页面如下所示:
.card.mb-3
.card-header
%h5.mb-0 Restricted access
.card-body
= simple_form_for @user, url: authorization_check_for_2fa_two_factor_settings_path, html: { method: :post } do |f|
.form-inputs
= f.input :password, input_html: { autocomplete: "current-password" }, required: true
.form-actions
= submit_button 'Submit', class: 'btn btn-primary'
路由文件内部:
resource :two_factor_settings do
get :authorization_check_for_2fa, on: :member
post :authorization_check_for_2fa, on: :member
get :regenerate_backup_codes, on: :member
end
如果能提供任何导致此错误的线索,我们将不胜感激。感谢
根据simple_form的文档,您的表单应该是这样的:
<%= simple_form_for(@user, as: :user, method: :post, url: users_path) do |f| %>
<%= f.input :name %>
<%= f.submit 'New user' %>
<% end %>
在您的案例中,最重要的部分是f.submit 'New user'
。你提交的表格是在宝石的表格之外。