Я пытаюсь внедрить AWS Cognito в свое приложение для лучшей всесторонней аутентификации. Система представляет собой приложение Rails, которое в настоящее время использует Warden/Devise в качестве метода управления учетными записями пользователей (вход в систему, регистрация).
Моя цель — иметь пул пользователей AWS, содержащий список пользователей для приложения. Когда пользователь проверяется с помощью Cognito, я хочу затем выполнить поиск в таблицах, которые мы в настоящее время используем для роли, и переместить пользователя в правильную область системы на основе назначенной ему роли.
Я начал реализовывать логику, чтобы справиться с этим, но столкнулся с кирпичной стеной.
Пожалуйста, смотрите ниже мой код.
cognito_authenticable.rb
Логика обработки аутентификации cognito. Все, что я хочу сделать здесь, это проверить, что пользователь зарегистрирован, и вернуть действительный токен, чтобы я мог предпочесть внутренние проверки приложения для сбора роли пользователя.
def authenticate!
if params[:login]
region_name = 'us-east-2'
user_pool_id = 'us-east-2_Qj78BNQon'
client_id = '1pv3eno72e51mll3q36cuiojmr'
client = Aws::CognitoIdentityProvider::Client.new(
region: region_name
)
resp = client.initiate_auth({
client_id: client_id,
auth_flow: "USER_PASSWORD_AUTH",
auth_parameters: {
"USERNAME" => email,
"PASSWORD" => password
}
})
end
end
divise.rb
Этот код предназначен только для добавления новой стратегии проверки подлинности в службу управления приложениями.
config.warden do |manager|
manager.strategies.add(:cognito,
Devise::Strategies::CognitoAuthenticatable)
manager.default_strategies(:scope => :login).unshift :cognito
manager.default_strategies(:scope => :login).pop
end
Ошибка вывода в консоли
Aws::Errors::MissingCredentialsError (невозможно подписать запрос без набора учетных данных):
config/initializers/cognito_authenticable.rb:23:in `аутентифицировать!'
а вот изображение из запущенного приложения localhost.
Любая помощь в этом была бы потрясающей.
Заранее спасибо.