Я пытаюсь внедрить AWS Cognito в свое приложение для лучшей всесторонней аутентификации. Система представляет собой приложение Rails, которое в настоящее время использует Warden / Devise в качестве метода обработки учетных записей пользователей (вход в систему, регистрация).
Моя цель - создать AWS UserPool, который содержит список пользователей приложения. Когда пользователь проверен с помощью Cognito, я хочу затем выполнить поиск таблиц, которые мы в настоящее время используем для роли, и переместить пользователя в правильную область системы на основе роли, которой он также назначен.
Я начал реализовывать логику, чтобы справиться с этим, но столкнулся с кирпичной стеной.
Пожалуйста, смотрите ниже мой код.
cognito_authenticatable.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_authenticatable.rb: 23: в `authenticate! '
и вот изображение из приложения localhost, которое было запущено.
Любая помощь по этому вопросу была бы удивительной.
Спасибо заранее.