ユーザーアカウントのリンクを解除する
Auth0 Management APIのUnlink a User Account(ユーザーアカウントのリンクを解除する)エンドポイント、またはAuth0.jsライブラリーを使用して、ターゲットのユーザーアカウントからIDのリンクを解除して、分離したユーザーアカウントに戻します。
このリンク解除プロセスの結果は次のようになります。
プライマリアカウントのID配列からセカンダリアカウントが削除されます。
新たなセカンダリユーザーアカウントが作成されます。
セカンダリアカウントにメタデータはありません。
セカンダリIDを完全に削除したい場合は、先にアカウントのリンクを解除して、次に、新たに作成されたセカンダリアカウントを削除しなければなりません。
エンドポイントを呼び出す場所に応じて、次の2つのスコープのいずれかを使用します。
クライアント側コードからの場合は
update:current_user_identities
サーバー側コードからの場合は
update:users
このエンドポイントでは、以下のパラメーターを使用します。
パラメーター | タイプ | 説明 |
---|---|---|
id |
string |
プライマリユーザーアカウントのID(必須) |
provider |
string |
リンクされたセカンダリアカウントのIDプロバイダー名(google-oauth2 など) |
user_id |
string |
リンクされたセカンダリアカウントのID(google-oauth2|123456789081523216417 の| の後に表示された123456789081523216417 部分など) |
インスタンスに複数のプロバイダーからのユーザーがある場合は、user_id
の前に[connection_name]|
を入れて、プロバイダーの名前を付けることもできます(例:"user-id":"google-oauth2|123456789081523216417")
。
応答例
[
{
"connection": "Initial-Connection",
"user_id": "5457edea1b8f22891a000004",
"provider": "auth0",
"isSocial": false,
"access_token": "",
"profileData": {
"email": "",
"email_verified": false,
"name": "",
"username": "johndoe",
"given_name": "",
"phone_number": "",
"phone_verified": false,
"family_name": ""
}
}
]
Was this helpful?
プライマリアカウントからJWTを使用する
アカウントのリンクを解除するには、認可用のプライマリアカウントからJWTを使用してManagement APIのUnlink a User Accountエンドポイントを呼び出します。
function unlinkAccount(secondaryProvider, secondaryUserId){
var primaryUserId = localStorage.getItem('user_id');
var primaryJWT = localStorage.getItem('id_token');
$.ajax({
type: 'DELETE',
url: 'https://' + '{yourDomain}' + '/api/v2/users/' + primaryUserId +
'/identities/' + secondaryProvider + '/' + secondaryUserId,
headers: {
'Authorization': 'Bearer ' + primaryJWT
}
}).then(function(identities){
alert('unlinked!');
showLinkedAccounts(identities);
}).fail(function(jqXHR){
alert('Error unlinking Accounts: ' + jqXHR.status + ' ' + jqXHR.responseText);
});
}
Was this helpful?
update:usersスコープを持つアクセストークンを使用する
2つ以上のユーザーアカウントのリンクを解除する必要がある場合は、update:users
スコープを持つManagement APIのアクセストークンを使用して、Management APIのUnlink a User Accountエンドポイントを呼び出します。
function unlinkAccount(secondaryProvider, secondaryUserId) {
var primaryUserId = localStorage.getItem('user_id');
var primaryAccessToken = localStorage.getItem('access_token');
// Uses the Access Token of the primary user as a bearer token to identify the account
// which will have the account unlinked to, and the user id of the secondary user, to identify
// the user that will be unlinked from the primary account.
$.ajax({
type: 'DELETE',
url: 'https://' + AUTH0_DOMAIN +'/api/v2/users/' + primaryUserId +
'/identities/' + secondaryProvider + '/' + secondaryUserId,
headers: {
'Authorization': 'Bearer ' + primaryAccessToken
}
}).then(function(identities){
alert('unlinked!');
showLinkedAccounts(identities);
}).fail(function(jqXHR){
alert('Error unlinking Accounts: ' + jqXHR.status + ' ' + jqXHR.responseText);
});
}
Was this helpful?
サーバー側コードからアカウントのリンクを解除する
セッション内のユーザーを(それぞれが独立したユーザーアカウントを表す)新しいID配列で更新します。
const ensureLoggedIn = require('connect-ensure-login').ensureLoggedIn();
const Auth0Client = require('../Auth0Client');
const express = require('express');
const router = express.Router();
...
router.post('/unlink-accounts/:targetUserProvider/:targetUserId',ensureLoggedIn, (req,res,next) => {
Auth0Client.unlinkAccounts(req.user.id, req.params.targetUserProvider, req.params.targetUserId)
.then( identities => {
req.user.identities = req.user._json.identities = identities;
res.send(identities);
})
.catch( err => {
console.log('Error unlinking accounts!',err);
next(err);
});
});
Was this helpful?
update:users
スコープを持つManagement APIのアクセストークンを使用して、Management API v2のUnlink a User Accountエンドポイントを呼び出します。
const request = require('request');
class Auth0Client {
...
unlinkAccounts(rootUserId, targetUserProvider, targetUserId){
return new Promise((resolve,reject) => {
var reqOpts = {
method: 'DELETE',
url: 'https://{yourDomain}/api/v2/users/' + rootUserId +
'/identities/' + targetUserProvider + '/' + targetUserId,
headers: {
'Authorization': 'Bearer ' + process.env.AUTH0_APIV2_TOKEN
}
};
request(reqOpts,(error, response, body) => {
if (error) {
return reject(error);
} else if (response.statusCode !== 200) {
return reject('Error unlinking accounts. Status: '+ response.statusCode + ' ' + JSON.stringify(body));
} else {
resolve(JSON.parse(body));
}
});
});
}
}
module.exports = new Auth0Client();
Was this helpful?