Разработайте дезинфицирующее средство, не разрешающее параметры для входа - PullRequest
0 голосов
/ 09 июля 2019

Я следовал этой документации, чтобы позволить пользователям войти в систему с именем пользователя или адресом электронной почты, используя параметр 'login':

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

Моя база данных содержит трех пользователей. Каждый раз, когда я пытаюсь войти, независимо от того, какая учетная запись, это первый пользователь, который всегда входит в систему. Я думаю, что причина как-то связана с разрешенными параметрами для sign_in в контроллере сессий Devise:

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, это должно работать, поэтому, пожалуйста, дайте мне знать, если вы обнаружите что-то не так, связанное с этой проблемой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...