AWS Cognitoでのサインアップ
あいさつ
どうも、はかせです。
今回はようやっとCognitoでサインアップに成功したので
そのまとめです。
今回使用したunityのバージョンはUnity 2018.3.6f1です。
Unityでやること
Unityでやることは
・AWS使うための前準備
・コーディング&オブジェクト配置
この二つです。
AWS使うための前準備
まずは前準備として、
AWSを使うためのdllやらなんやらを入手します。
私は下記の5つを入れました。
NuGet Gallery | AWSSDK.Core 3.3.103.29
NuGet Gallery | AWSSDK.CognitoIdentity 3.3.100.65
NuGet Gallery | AWSSDK.SecurityToken 3.3.102.14
NuGet Gallery | AWSSDK.CognitoIdentityProvider 3.3.102.50
NuGet Gallery | AWSSDK.Extensions.CognitoAuthentication 0.9.4
それぞれページに飛ぶと右側に「Download package」ってのがあるので
そこをクリックしてダウンロードします。
ダウンロードしたら拡張子が「.nugkg」になっていると思います。
この部分をまるっと「.zip」にしましょう。
データの欠損とかは発生しないので安心してください。
名前を変えたら解凍してください。
そしたらおそらくこんな感じのフォルダ構造になっているはずです。
今回使うのはlib配下のnet45というフォルダです。
これをそのままUnity内に放り込んじゃってください。
この作業をダウンロードしたもの全てで行ってください。
そうしたらUnityの中身はこんな感じになっているはずです。
(AWS_Packagesはフォルダが取っ散らかるのが嫌だったんで作っただけです)
前準備もあと少しで終わります。
次に放り込んだdllを使えるようにUnityの設定を弄ります。
Unityの左上らへんにあるメニューの
Edit > Project Settings > Player > Other Settingsの中にある
Api Compatibility Levelを.NET 4.xに変更してください。
コーディング&オブジェクト配置
いよいよUnityでのコーディング&オブジェクト配置です。
まずはオブジェクトを置いてしまいましょう。
今回必要なものは
・サインアップ用のEmailとPasswordの入力フォーム
・サインアップボタン
・入力したEmailに送られてきた認証コードの入力フォーム&送信ボタン
まぁこんな感じです。
次にコードです。
まずはサインアップボタンを押したときの処理です。
using System; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using Amazon.CognitoIdentityProvider; // for AmazonCognitoIdentityProviderClient using Amazon.CognitoIdentityProvider.Model; // for SignUpRequest using MySpace; public class Signup : MonoBehaviour { public InputField emailField; public InputField passwordField; public void OnClick() { var client = new AmazonCognitoIdentityProviderClient(null, Amazon.RegionEndpoint.APNortheast1); var sr = new SignUpRequest { ClientId = AWSIDs.ClientID, Username = emailField.text, Password = passwordField.text, UserAttributes = new List<AttributeType> { new AttributeType { Name = "email", Value = emailField.text } } }; try { var result = client.SignUp(sr); Debug.Log(result); } catch (Exception ex) { Debug.LogError(ex); } } }
内容自体は落としてきたdllの中にあるクラスを作って
手順通りにリクエストを送っているだけです。
ここで使っているAWSIDsというのは自作クラスで
こんな感じです。
namespace MySpace { public static class AWSIDs { public static string ClientID = "自分のクライアントID"; public static string UserPoolID = "自分のUserPoolID"; } }
まぁマジックナンバーは少しでも減らしましょうってことで。
こうして作ったコードをサインアップボタンにあてがって
OnClick()をボタンコンポーネントのOnClickに登録しましょう。
そして次は認証コード送信ボタン
using System; using UnityEngine; using UnityEngine.UI; using Amazon.CognitoIdentityProvider; using Amazon.CognitoIdentityProvider.Model; using MySpace; public class Confirmation : MonoBehaviour { public InputField emailField; public InputField confirmationCodeField; public void OnClick() { var client = new AmazonCognitoIdentityProviderClient(null, Amazon.RegionEndpoint.APNortheast1); var confirmSignUpRequest = new ConfirmSignUpRequest { Username = emailField.text, ConfirmationCode = confirmationCodeField.text, ClientId = AWSIDs.ClientID }; try { var confirmSignUpResult = client.ConfirmSignUp(confirmSignUpRequest); Debug.Log(confirmSignUpResult.ToString()); } catch (Exception ex) { Debug.LogError(ex); } } }
やってることはさっきとほとんど同じです。
こっちも同様にボタンにつけて登録しましょう。
これでUnityでやることは終わりです。
AWSでやること
AWSでやることは
・UserPoolの設定
・IDPoolの設定
この二つです。
UserPoolの設定
Congnitoで認証するアプリやユーザーの設定をします。
基本的には公式とか先人たちの記事に従って作ればいいのですが、
注意点が一つあります。
おそらく順当に作ってIDとか取得して先述のコードに値放り込んでやると
こんなエラーに遭遇すると思います。
NotAuthorizedException:Unable to verify secret hash for client XXX
(XXXがクライアントID)
これはちょっとIDを作るときの設定を弄ることで解決します。
このクライアントシークレットっていう設定が邪魔らしいです。
なのでクリックして設定を外しましょう。
ちなみに散々言ってるクライアントIDってのはこれです。
(アプリクライアントタグから確認できます)
IDPoolの設定
IDPoolってのは認証時と非認証時での
アクセス権限の設定とかできるらしいです。
今回はサインアップだけだったので
特に弄らず公式や先人たちの記事を参考に作りました。
実行
時は満ちた・・・・
というわけで諸々の値を設定して
実行ポチっとな。
無事ユーザーが追加されました。
あとがき
今回はAWSCognitoを使ってサインアップをやってみました。
ただサインアップするだけでこの手間がかかるとは・・・・
私が慣れてないってのが大きな要因でしょうが
極めて時間がかかりました。
最初はUnityで配布されているAWSSDK使ってたんですが、
公式や先人たちのやり方に倣ってやってもうんともすんとも言わない。
諦めて.NETの方で配布されているAWSSDKを使ってやりました。
(こっちのが割と慣れた書き方や使い方だったりする)
それでは今回はこの辺でノシ