Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
19
Help us understand the problem. What is going on with this article?
@yosi-q

Rubyを使用してCognito UserPoolにユーザを登録する

More than 3 years have passed since last update.

AWSのAmazon CognitoでUserPoolsを使う例って、モバイルやJavascriptを用いたものはよく出ているけど、
例えばRubyでやる場合とかどうすりゃええねん!と思いつつ、なかなか例が出ていなかったのでやってみた。
その記録。

UserPoolsの設定

Step by stepで書くのは面倒だったので、結果だけ貼っておきます。

UserPools設定

特に、Appsの部分の「CognitoSampleApp」は、「Generate client secret」のチェックを外しました。

Appsの作成

Cognito操作のためIAMユーザを作成

このあとAWS SDKを使用したCognito操作のため、IAMユーザを作成します。
なお、このユーザには「AmazonCognitoPowerUser」ポリシーを割り当てます。

Rubyを利用してユーザ登録

はじめに

AWS SDK for Ruby (Version 2)を用いて、実際に登録してみた。
お試しということで、irbを使ってざくっとやってみた。

irb(main):001:0> require 'aws-sdk-core'
=> true

設定に関してはYAMLファイルを用意しておいた。
内容的には、前述で用意したユーザのACCESS KEY情報(access_key_id, secret_access_key)、Cognitoのリージョン(region)、設定したアプリケーションのクライアントID(client_id)など。

Cognitoで設定したアプリケーションのクライアントID(client_id)は、Appsの設定を参照してください。(黒塗で消した部分)

client_idの確認

irbでは以下のように読み込みます。

irb(main):002:0> require 'yaml'
=> true
irb(main):003:0> props = YAML.load(File.read('./credentials.yml'))
=> {"region"=>"us-east-1", "access_key_id"=>"ACCESS_KEY", "secret_access_key"=>"SECRET_ACCESS_KEY", "client_id"=>"xxxxxxxxxxxxxxxxxxxxxxxxxx"}

Sign up(ユーザ登録)

CognitoIdentityProviderのClientを作成します。

irb(main):004:0> client = Aws::CognitoIdentityProvider::Client.new(
irb(main):005:1*     region:            props['region'],
irb(main):006:1*     access_key_id:     props['access_key_id'],
irb(main):007:1*     secret_access_key: props['secret_access_key'],
irb(main):008:1* )
=> #<Aws::CognitoIdentityProvider::Client>

Sign upでユーザを作ります。
この時、usernameはUserPoolの設定でattributeとは異なるものなので注意。
attributeで選択したものは「user_attributes」にkey-valueの形式で指定していきます。

irb(main):009:0> resp = client.sign_up({
irb(main):010:2*     client_id: props['client_id'],
irb(main):011:2*     username:  "sampleuser",
irb(main):012:2*     password:  "SamplePassw0rd!",
irb(main):013:2*     user_attributes: [
irb(main):014:2*         {
irb(main):015:2*             name:  "email",
irb(main):016:2*             value: "sampleuser@example.com"
irb(main):017:2*         },
irb(main):018:2*         {
irb(main):019:2*             name:  "nickname",
irb(main):020:2*             value: "samplenickname"
irb(main):021:2*         }
irb(main):022:2*     ],
irb(main):023:2*     validation_data: [],
irb(main):024:2* })
=> #<struct Aws::CognitoIdentityProvider::Types::SignUpResponse user_confirmed=false, code_delivery_details=#<struct Aws::CognitoIdentityProvider::Types::CodeDeliveryDetailsType destination="s***@e***.com", delivery_medium="Email", attribute_name="email">>

この時点で、user_attributesのemailに指定したメールアドレスあてに下記のようなメールが届きます。

verification.png

このメールに記載されているコードを用いて確認します。

Sign up直後のUserPoolの状況

ここで一度UserPoolの内容を確認します。

SignUp直後のUserPool

上記のようにユーザが追加されていることがわかります。

さらにUsernameリンクをクリックすると、下記のような情報が参照できます。

SignUp直後のUser

「email_verified false」となっており、まだメールで通知された確認コードによる認証が済んでいない状態です。

確認コードを登録

メール通知された確認コード(confirmation_code)を使って、登録を完了します。

irb(main):025:0> resp = client.confirm_sign_up({
irb(main):026:2*     client_id: props['client_id'],
irb(main):027:2*     username:  "sampleuser",
irb(main):028:2*     confirmation_code: "706183",  #enter the verification code on email
irb(main):029:2*     force_alias_creation: false,
irb(main):030:2* })
=> #<struct Aws::CognitoIdentityProvider::Types::AddCustomAttributesResponse>

確認が完了しました。

確認コード登録完了直後のUserPoolの状況

UserPoolの内容を確認します。

確認コード登録完了直後のUserPool

StatusがConfirmedに変更されています。

さらにUsernameリンクをクリックし、詳細情報を参照します。

確認コード登録完了直後のUser

「email_verified true」となっており、確認完了したことがわかります。

19
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
yosi-q
インド資本の入った米国クラウドコンサルティングファームの東京オフィスに所属し、山形県鶴岡市からリモートワークしながら、ちょっとしたwonder探ししてます。 Qiitaは記録も含めてやったことをちょこちょこ残しています。 ここで記載した記事は私感や私自身の実施した内容の記録として記載しており、所属する組織とは関係ありません。

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
19
Help us understand the problem. What is going on with this article?