Auth0.swift:ユーザー管理
Management APIはユーザーアカウントのリンクを提供して、ユーザーがさまざまなプロバイダーから取得した個別のユーザーアカウントを1つのプロファイルにリンクまたはリンク解除できるようにます。また、ユーザーメタデータや他のプロファイル情報を更新することもできます。
ユーザーをリンクする
ユーザーアカウントをリンクすると、ユーザーがどのアカウントからでも認証できるようになり、どのアカウントを使用してログインしても同じプロファイルが引き出されます。Auth0では、デフォルトですべてのアカウントが個別のプロファイルとして扱われるため、ユーザーのアカウントをリンクしたい場合は以下の手順が必要です。
link
メソッドは、プライマリープロファイルのユーザーIDとセカンダリープロファイルのアクセストークン(このIDでログインした後に取得するトークン)の2つのパラメーターを受け付けます。ユーザーIDはこのユーザーアカウントの一意の識別子です。IDの形式がfacebook|1234567890
の場合、必要なIDは区切り文字のパイプに後続する部分(この例では1234567890
)です。
Auth0
.users(token: "user-scoped access token")
.link(userId, withOtherUserToken: "another user token")
.start { result in
switch result {
case .success(let userInfo):
print("User: \(userInfo)")
case .failure(let error):
print(error)
}
}
Was this helpful?
ユーザーをリンク解除する
ユーザーのリンク解除は、リンクと同様の処理になります。unlink
メソッドは、セカンダリープロファイルのユーザーID、セカンダリープロファイルのプロバイダー(接続のIDプロバイダー)とプライマリープロファイルのユーザーIDの3つのパラメーターを受け付けます。パラメーターは基本的に「このセカンダリーユーザーを(このプロバイダーで)このプライマリーユーザーからリンク解除する」と指示します。
Auth0
.users(token: "user-scoped access token")
.unlink(identityId: identifier, provider: provider, fromUserId:userId)
.start { result in
switch result {
case .success(let userInfo):
print("User: \(userInfo)")
case .failure(let error):
print(error)
}
}
Was this helpful?
アカウントのリンクでは、セカンダリーアカウントのプロファイルのメタデータはプライマリーアカウントのプロファイルのメタデータとマージされません。同様に、アカウントのリンク解除では、セカンダリーアカウントのプロファイルはプライマリーアカウントのプロファイルのメタデータを保持しません。
ユーザーメタデータを取得する
Auth0
.users(token: "user-scoped access token")
.get(userId, fields: ["user_metadata"], include: true)
.start { result in
switch result {
case .success(let userInfo):
print("User: \(userInfo)")
case .failure(let error):
print(error)
}
}
Was this helpful?
ユーザーメタデータを更新する
メタデータの更新では、userMetadata
オブジェクトを作成してから、patch
メソッドを呼び出して、ユーザーIDとuserMetadata
オブジェクトを渡します。このオブジェクトの値は、同じキーを持つ既存の値を上書きするか、ユーザーメタデータに値がない場合は新しい値を追加します。
Auth0
.users(token: "user-scoped access token")
.patch("user identifier", userMetadata: ["first_name": "John", "last_name": "Doe"])
.start { result in
switch result {
case .success(let userInfo):
print("User: \(userInfo)")
case .failure(let error):
print(error)
}
}
Was this helpful?