ユーザー作成
Kii Cloud が提供しているユーザー作成機能のうち、最も基本的な方法はユーザー名などの識別情報とパスワードを組み合わせてユーザーを作成する方法です。ここでは、ユーザー名、メールアドレス、電話番号によってユーザーを作成する方法を示します。
ユーザーの識別
ユーザーの作成ではユーザー名、メールアドレス、電話番号を組み合わせてユーザーを識別できます。
たとえば、以下の方法でユーザーを使用できます。
- 登録時にユーザー名 "id123456"、パスワード "123ABC" を指定してユーザーを作成
- ログイン時にユーザー名 "id123456"、パスワード "123ABC" を指定して認証し、そのユーザーを使用
ユーザー登録が終わった後や、ログインが成功した後はそのユーザーによるログイン状態となり、後続の処理を行うことができます。ユーザー登録直後に明示的にログインする必要はありません。
Kii Cloud ではユーザー名で KiiUser を識別できるだけでなく、ユーザー名の代わりにメールアドレスや電話番号を指定する方法もサポートします。次の表のとおり、ユーザー名、メールアドレス、電話番号のすべての組み合わせを使ってユーザーを登録できます。
ユーザー登録で指定する情報 | ログインで入力する情報 | ||||
---|---|---|---|---|---|
ユーザー名 | メールアドレス | 電話番号 | パスワード | ユーザー名として指定できる情報 | パスワード |
指定 | - | - | 必要 | ユーザー名 | 必要 |
指定 | - | 指定 | 必要 | ユーザー名または電話番号 | 必要 |
指定 | 指定 | - | 必要 | ユーザー名またはメールアドレス | 必要 |
指定 | 指定 | 指定 | 必要 | ユーザー名、メールアドレスまたは電話番号 | 必要 |
- | - | 指定 ※1 | 必要 | 電話番号 | 必要 |
- | 指定 ※2 | - | 必要 | メールアドレス | 必要 |
- | 指定 ※3 | 指定 ※3 | 必要 | メールアドレスまたは電話番号 | 必要 |
※1 電話番号による認証がオンのときはユーザー登録できず、エラーになります。
※2 メールアドレスによる認証がオンのときはユーザー登録できず、エラーになります。
※3 電話番号とメールアドレスの認証が両方同時にオンのときはユーザー登録できず、エラーになります。
たとえば、ユーザー名 "id123456"、メールアドレス "user@mydomain.com"、パスワード "123ABC" でユーザー登録した場合、このユーザーは次の 2 通りの方法でログインできます。
- ユーザー名 "id123456"、パスワード "123ABC"
- ユーザー名 "user@mydomain.com"、パスワード "123ABC"
登録したメールアドレスや電話番号を、ログイン操作でユーザー名の代わりに指定できる点が重要です(ログイン UI で同じフィールドを使用するイメージ)。登録したメールアドレスや電話番号をログインの認証用に使用したくない場合は、カスタムの ユーザー属性 を使用するか、ユーザースコープの Bucket にこれらの情報を格納するようにします。
ログインではユーザー名、およびユーザー名の代わりにメールアドレスおよび国際電話番号形式の電話番号を、同じ API で指定できます(国内電話番号形式を使用する場合は別 API です)。この 3 つは、「@」を含むとメールアドレス、「+」を含むと電話番号、それ以外はユーザー名として識別されるため、これら 3 つが混在する入力でもアプリケーションを通して一意のユーザーを識別できます。
ユーザー名以外はユーザー登録後に変更することができますが、ユーザー名を変更する方法は提供されていません。
なお、メールアドレスや電話番号は認証機能によって実際に使用できるものであることを確認する機能も用意しています(メールアドレスと電話番号の認証)。この場合、これらの認証が完了した後にログインできるようになります。
ユーザー作成
ユーザー名とパスワードを使ったユーザー作成の例です。この例では、ユーザー名 "user_123456"、パスワード "123ABC" で新規ユーザーの作成を行っています(例の中では、さらに "displayName" と "country" も指定しています)。
curl -v -X POST \
-H "Authorization: Basic {BASE64_ENCODED_APPID_AND_APPKEY}" \
-H "Content-Type: application/vnd.kii.RegistrationRequest+json" \
"https://api-jp.kii.com/api/apps/{APP_ID}/users" \
-d '{
"loginName": "user_123456",
"displayName": "person test000",
"country": "JP",
"password": "123ABC"
}'
ユーザーの作成は Basic 認証 を使って行います。{BASE64_ENCODED_APPID_AND_APPKEY}
には AppID と任意の値をコロン(:) で連結した文字列を Base64 エンコードしたものを入れてください。
ユーザー作成が成功すると、Kii Cloud は次のようなレスポンスでユーザーの UserID を返します。登録しようとしたユーザーと同名のユーザーがすでに登録されていた場合、HTTP ステータス 409 で通知します。
HTTP/1.1 201 Created
Server: Apache-Coyote/1.1
Location: https://api-jp.kii.com/api/apps/{APP_ID}/users/{USER_ID}
Content-Type: application/vnd.kii.RegistrationResponse+json
Transfer-Encoding: chunked
Date: Mon, 23 Apr 2012 00:22:38 GMT
{
"userID" : {USER_ID}
}
次の例では、ユーザー名 "user_123456"、メールアドレス "user_123456@example.com
"、パスワード "123ABC" で新規ユーザーの作成を行っています。
curl -v -X POST \
-H "Authorization: Basic {BASE64_ENCODED_APPID_AND_APPKEY}" \
-H "Content-Type: application/vnd.kii.RegistrationRequest+json" \
"https://api-jp.kii.com/api/apps/{APP_ID}/users" \
-d '{
"loginName": "user_123456",
"displayName": "person test000",
"country": "JP",
"password": "123ABC",
"emailAddress": "user_123456@example.com"
}'
次の例では、ユーザー名 "user_123456"、電話番号 "+819012345678"、パスワード "123ABC" で新規ユーザーの作成を行っています。
curl -v -X POST \
-H "Authorization: Basic {BASE64_ENCODED_APPID_AND_APPKEY}" \
-H "Content-Type: application/vnd.kii.RegistrationRequest+json" \
"https://api-jp.kii.com/api/apps/{APP_ID}/users" \
-d '{
"loginName": "user_123456",
"displayName": "person test000",
"country": "JP",
"password": "123ABC",
"phoneNumber": "+819012345678"
}'
電話番号を国内番号形式で指定する場合は、"country" 属性に 2 文字の国コードを指定してください。
なお、ユーザー名を指定せず、メールアドレスないしは電話番号のみでユーザー作成を行う場合、メールアドレスや電話番号の認証をオフにしておく必要があります(認証処理の詳細については次のセクションを参照してください)。
リソース URL とユーザーの表現
Kii Cloud の REST API でユーザーを操作するものは、以下の 5 種類の方法のいずれかで対象のユーザーを特定できます。
https://api-jp.kii.com/api/apps/{APP_ID}/users/{USER_ID}/...
ユーザー登録時に Kii Cloud から発行されたユーザー ID を使って、対象ユーザーを表す形式です。
https://api-jp.kii.com/api/apps/{APP_ID}/users/LOGIN_NAME:{USERNAME}/...
ユーザー登録時に設定したログイン名を使って、対象ユーザーを表す形式です。
https://api-jp.kii.com/api/apps/{APP_ID}/users/EMAIL:{EMAIL_ADDRESS}/...
ユーザー登録時やユーザー属性設定時に指定したメールアドレスを使って、対象ユーザーを表す形式です。
下記のメールアドレスの認証機能がオンになっている場合、認証メールのリンクのクリックによって認証が完了するまでは、この形式でのユーザー指定はできません(ユーザーが見つからないものと見なされます)。認証機能がオンの場合は、ユーザー登録完了の直後から使用できます。
https://api-jp.kii.com/api/apps/{APP_ID}/users/PHONE:{PHONE_NUMBER}/...
ユーザー登録時やユーザー属性設定時に指定した電話番号を使って、対象ユーザーを表す形式です。
下記の電話番号の認証機能がオンになっている場合、認証コードの確認が完了するまでは、この形式でのユーザー指定はできません(ユーザーが見つからないものと見なされます)。認証機能がオンの場合は、ユーザー登録完了の直後から使用できます。
https://api-jp.kii.com/api/apps/{APP_ID}/users/me/...
Authorization ヘッダを使ってユーザーのアクセストークンを指定した際に、アクセストークンを保持しているユーザー自身を表す形式です。
管理者トークンや Thing のアクセストークンを使用している場合、この形式は指定できません。
なお、仮ユーザー(Pseudo User) では、通常のユーザーに変更するまでの間、ログイン名、メールアドレス、電話番号による形式を使用できません。
入力値の制限
ユーザー関連の入力値には、文字数や文字種の制限があります。
入力値のチェック方法は SDK によって異なるものがあります。ここに示す情報は、SDK の中で最も厳しいチェック方法のため、各 SDK 共通で使用できます。
ユーザー名
英数字と「_」「-」「.」から構成される 3~64 文字の文字列です。
登録時、同じアプリケーション内ですでに使われているユーザー名を指定するとエラーになります。
ユーザー名は、ログイン時のユーザー識別情報として入力するほか、他のユーザーを検索(Kii Cloud SDK for Android の findUserByUserName
メソッドなど)する際にも使用します。
ユーザー名の英字部分は小文字に変換して登録されます。
メールアドレス
「ユーザー@ドメイン」というメールアドレスの形式をした文字列です。基本的に、ユーザー部は英数字と「.」「_」「%」「+」「-」、ドメイン部は英数字と「.」から構成される文字列です。
メールアドレスの文字列は、200 文字以内で、"@" が含まれており、かつ、RFC822 に準拠している必要があります。ただし、エラーチェックの詳細はプラットフォームにより多少異なります。
登録時や変更時にアプリケーション内ですでに使われているメールアドレスを指定するとエラーになります。
電話番号
電話番号は以下の 2 通りの方法で指定できます。SDK によっては国際電話番号形式のみがサポートされます。
国際電話番号形式:「+」に続いて、国を表す番号と、国内電話番号を使う電話番号の形式です。「-」や「.」がない、数字のみの文字列 10~15 文字で指定します。たとえば、日本国内の "090-1234-5678" は "+819012345678" で表現されます。
国内電話番号形式:国内で使用される電話番号を使う方法です。国の情報を libphonenumber で定められた英大文字 2 文字で指定します。たとえば Android では、"09012345678" と国情報 "JP" の 2 つをパラメータで指定します。また、REST では "JP-9012345678" のような表現で指定します。
国際電話番号形式と国内電話番号形式は相互に変換可能であり、電話番号 "+819012345678" と "JP-9012345678" で識別される対象は同じユーザーを指します。
登録時や変更時にアプリケーション内ですでに使われている電話番号を指定するとエラーになります。
電話番号として指定できるのはモバイルの電話番号だけで、固定電話などの電話番号を指定すると、エラーになります。電話番号は、サーバー内の専用のライブラリーによってモバイルのものかどうかが判定されます。
パスワード
英数字と記号(Unicode の文字範囲で \u0020~\u007e )を 4~50 文字の範囲で指定できます。
ユーザー一覧機能の実装ヒント
ユーザー一覧の機能が必要な場合、アプリ側での実装が必要となります。Kii Cloud では、現在、作成済みのユーザー一覧を返す API を提供していません(ユーザー 1 件の検索であれば 他ユーザーの属性の読み込み に記載されている方法で実現できる場合があります)。
実装の一例として、アプリケーションスコープの Bucket を使用する案が考えられます。ユーザーの作成と同時に、作成したユーザー ID(または URI)を持った Object を、アプリケーションスコープの Bucket に登録しておきます。ユーザー一覧が必要なタイミングで、この Bucket 内の Object を取得します。ユーザー名などを同時に登録しておけば、これらを使って検索することもできます。
ただし、このままでは、ユーザー数が増加した場合に必ずパフォーマンスの影響が出るため、全ユーザーの取得を避けられるように、機能や実装を調整しておく必要があります。パフォーマンス もご覧ください。
また、アプリケーションスコープの Bucket は全ユーザーからアクセスできるため、メールアドレス等を登録すると、攻撃 に対して脆弱となります。アクセス権 を設定し、さらに サーバー機能拡張による管理者アクセス なども検討する必要があります。