ruby-on-rails - Ruby on rails + aws cognito 示例

标签 ruby-on-rails ruby heroku devise amazon-cognito

我正在构建一个部署在 heroku 上的 rails 5 应用程序。 我想用AWS congnito来实现单点登录,但是没有足够的例子来实现。 我正在使用 devise 进行身份验证。现在我的目标是让我的所有用户都使用 AWS cognito 并通过我的 Rails 应用程序对他们进行身份验证。

这是我在 AWS congnito with rails 上找到的唯一资源,我正在寻找一些示例应用程序或指向工具或 ruby​​ API 文档的链接来实现此目的。

请帮助。

Update On basis Of Bala Answer

require 'aws-sdk'

ENV['AWS_ACCESS_KEY_ID'] = 'XXXXXXXXXXXXXXXXX'
ENV['AWS_SECRET_ACCESS_KEY'] = 'XXXX+XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
region_name = 'us-east-1'
endpoint = 'cognito-idp.us-east-1.amazonaws.com'

client = Aws::CognitoIdentityProvider::Client.new(
  region: region_name
)


resp = client.admin_create_user({
  user_pool_id: "us-east-1_iD7xNHj0x", # required
  username: "Test", # required
  user_attributes: [
    {
      name: "email", # required
      value: "sachin.singh@example.com",
    },
  ],
  validation_data: [
    {
      name: "Email", # required
      value: "AttributeValueType",
    },
  ],
  temporary_password: "PasswordType",
  force_alias_creation: false,
  message_action: "RESEND", # accepts RESEND, SUPPRESS
  desired_delivery_mediums: ["EMAIL"], # accepts SMS, EMAIL
})

Error stack trace

home/sachin/.rvm/gems/ruby-2.1.5@global/gems/aws-sdk-core-2.6.38/lib/seahorse/client/plugins/raise_response_errors.rb:15:in `call': User does not exist. (Aws::CognitoIdentityProvider::Errors::UserNotFoundException)
    from /home/sachin/.rvm/gems/ruby-2.1.5@global/gems/aws-sdk-core-2.6.38/lib/aws-sdk-core/plugins/idempotency_token.rb:18:in `call'
    from /home/sachin/.rvm/gems/ruby-2.1.5@global/gems/aws-sdk-core-2.6.38/lib/aws-sdk-core/plugins/param_converter.rb:20:in `call'
    from /home/sachin/.rvm/gems/ruby-2.1.5@global/gems/aws-sdk-core-2.6.38/lib/seahorse/client/plugins/response_target.rb:21:in `call'
    from /home/sachin/.rvm/gems/ruby-2.1.5@global/gems/aws-sdk-core-2.6.38/lib/seahorse/client/request.rb:70:in `send_request'
    from /home/sachin/.rvm/gems/ruby-2.1.5@global/gems/aws-sdk-core-2.6.38/lib/seahorse/client/base.rb:207:in `block (2 levels) in define_operation_methods'
    from aws_cognito.rb:20:in `<main>'

Update 2

resp = client.admin_initiate_auth({
  user_pool_id: "us-east-1_uKM", # required
  client_id: "3g766413826eul9kre28qne4f", # required
  auth_flow: "ADMIN_NO_SRP_AUTH",
  auth_parameters: {
    "EMAIL" => "kapil.sachdev@metacube.com",
    "PASSWORD" => "Ibms#1234"
  }
})

最佳答案

首先,您需要为您的应用创建一个用户池

使用这个 link通过 AWS 控制台创建用户池

您可以在 http://docs.aws.amazon.com/sdkforruby/api/Aws/CognitoIdentityProvider/Client.html 找到用于注册、登录、更改密码和许多其他功能的 ruby​​ 方法

编辑

现在,您可以使用 sign_up 注册用户

登录用户使用 admin_initiate_auth

如果您需要手机号码确认、电子邮件确认,您需要配置您正在创建的用户池。

您可以通过http://docs.aws.amazon.com/sdkforruby/api/Aws/CognitoIdentityProvider/Client.html#confirm_sign_up-instance_method找到相应的手机号码确认方法。

关于ruby-on-rails - Ruby on rails + aws cognito 示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41222204/

相关文章:

ruby-on-rails - rails : Use library of models

ruby-on-rails - 有什么方法可以确定 csv 是否带有标题或不在 rails 中

ruby - 如何通过从另一个数组分配随机值将数组转换为散列?

database - heroku运行rails db :migrate Running rails

ruby-on-rails - puma initializer 不适用于 rails 4.2

heroku - Foreman:在开发和生产中使用不同的Procfile

ruby-on-rails - Elasticsearch排序选项不受支持

javascript - 是什么原因导致 datepicker 无法使用 jquery 在 rails 3.1.3 中加载?

javascript - ERB Javascript 条件错误

ruby - 有没有一种优雅的方法可以从散列中删除特定的键,它是 Ruby 中的子散列