【问题标题】:Examples of Ruby on rails + aws congnitoRuby on rails + aws cognito 示例
【发布时间】:2017-05-04 11:34:08
【问题描述】:

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

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

请帮忙。

根据巴拉答案更新

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
})

错误堆栈跟踪

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>'

更新 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"
  }
})

【问题讨论】:

  • 我怀疑你会在这里找到比在 google.com 上更多的例子。
  • @Sachin Singh,我正在做同样的事情,所以谢谢你的分享。您是卸载了 Devise 还是将其连接到了 Devise 中。如果你保留它,这段代码在哪里?
  • 我没有删除设计,但我停止使用它的大部分组件,并创建了我自己的注册、登录、忘记密码控制器和业务逻辑,在不久的将来我也会删除设计。
  • 感谢您的回复。您是否使用过滤器来验证用户是否在每个控制器中登录?如果你能分享你能分享的一切,我将不胜感激。正如你提到的,根本没有例子。
  • 我使用设计过滤器检查 current_user,我建议您在自定义控制器操作中使用设计登录方法,该方法将根据设计为用户创建会话。

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


【解决方案1】:

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

使用此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找到对应的手机号码确认方法

【讨论】:

  • 更新帖子,请帮我解决注册新用户时遇到的问题。
  • @SachinSingh 我对注册答案做了一些更改。
  • 如何使用电子邮件/电话代替用户名进行身份验证?
  • 用户名是 AWS Cognito 中的必填项。使用别名简化用户注册和登录(docs.aws.amazon.com/cognito/latest/developerguide/…),您可以使用电子邮件或电话号码登录。因此,在发送注册请求时,您可以将用户名作为电子邮件发送。
  • 感谢 Bala,但在我的情况下,用户电子邮件和电话可以同时存在,他应该可以选择使用电子邮件/电话进行身份验证。
猜你喜欢
  • 1970-01-01
  • 2013-06-14
  • 2020-09-18
  • 2017-07-22
  • 2012-04-21
  • 2013-06-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多