首页 > 解决方案 > 设计禁止登录参数的消毒剂

问题描述

我已按照此文档允许用户使用参数“登录”以用户名或电子邮件地址登录:

https://github.com/plataformatec/devise/wiki/How-To:-Allow-users-to-sign_in-using-their-username-or-email-address

我的数据库包含三个用户。每当我尝试登录时,无论是哪个帐户,它都是第一个始终登录的用户。我认为原因与设计会话控制器中允许的 sign_in 参数有某种关系:

class Users::SessionsController < Devise::SessionsController

  before_action :configure_sign_in_params, only: [:create]

  def create
    # Inspect params here...
    resource = warden.authenticate!(auth_options)
    sign_in(resource_name, resource)
    render json: {success: true,
                  jwt: current_token,
                  message: "Authentication successful" }
  end

  protected

  def configure_sign_in_params
    devise_parameter_sanitizer.permit(:sign_in, keys: [:login, :password])
  end

  ...
end

检查上面注释中标记的点显示的参数将给出(注意“允许:假”):

<ActionController::Parameters {"user"=>{"login"=>"second_user", "password"=>"secret"}, "controller"=>"users/sessions", "action"=>"create", "session"=>{"user"=>{"login"=>"second_user", "password"=>"secret"}}} permitted: false>

据我所知,基于https://www.rubydoc.info/github/plataformatec/devise/Devise/ParameterSanitizer这应该可以工作,所以如果您能发现与此问题相关的任何错误,请告诉我。

标签: ruby-on-railsdevise

解决方案


推荐阅读