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