

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# 認証されていないユーザーから認証されたユーザーへの切り替え
<a name="switching-identities"></a>

Amazon Cognito ID プールは、認証されたユーザーと認証されていないユーザーの両方をサポートします。認証されていないユーザーは、ID プロバイダー (IdPs) でログインしていない場合でも、 AWS リソースにアクセスできます。このレベルのアクセスは、ユーザーがログインする前にユーザーにコンテンツを表示する場合に便利です。認証されていない各ユーザーは、個別にログインして認証していない場合でも、ID プールに一意の ID があります。

このセクションでは、ユーザーがログインに使用する ID を、認証されていない ID から認証された ID に切り替える方法について説明します。

## Android
<a name="switching-identities-1.android"></a>

ユーザーは、認証されていないゲストとしてアプリケーションにログインできます。最終的に、ユーザーはサポートされている IdP のいずれかを使用してログインすることを決定する可能性があります。Amazon Cognito は、古いアイデンティティが新しいアイデンティティと同じ識別子を維持し、プロファイルデータが自動的にマージされることを確実にします。

アプリケーションに、プロファイルの結合が `IdentityChangedListener` インターフェイスを通じて通知されます。インターフェイスで `identityChanged` メソッドを実装して、これらのメッセージを受け取ります。

```
@override
public void identityChanged(String oldIdentityId, String newIdentityId) {
    // handle the change
}
```

## iOS - Objective-C
<a name="switching-identities-1.ios-objc"></a>

ユーザーは、認証されていないゲストとしてアプリケーションにログインできます。最終的に、ユーザーはサポートされている IdP のいずれかを使用してログインすることを決定する可能性があります。Amazon Cognito は、古いアイデンティティが新しいアイデンティティと同じ識別子を維持し、プロファイルデータが自動的にマージされることを確実にします。

`NSNotificationCenter` はプロファイルの結合をアプリケーションに通知します。

```
[[NSNotificationCenter defaultCenter] addObserver:self
                                      selector:@selector(identityIdDidChange:)
                                      name:AWSCognitoIdentityIdChangedNotification
                                      object:nil];

-(void)identityDidChange:(NSNotification*)notification {
    NSDictionary *userInfo = notification.userInfo;
    NSLog(@"identity changed from %@ to %@",
        [userInfo objectForKey:AWSCognitoNotificationPreviousId],
        [userInfo objectForKey:AWSCognitoNotificationNewId]);
}
```

## iOS - Swift
<a name="switching-identities-1.ios-swift"></a>

ユーザーは、認証されていないゲストとしてアプリケーションにログインできます。最終的に、ユーザーはサポートされている IdP のいずれかを使用してログインすることを決定する可能性があります。Amazon Cognito は、古いアイデンティティが新しいアイデンティティと同じ識別子を維持し、プロファイルデータが自動的にマージされることを確実にします。

`NSNotificationCenter` はプロファイルの結合をアプリケーションに通知します。

```
[NSNotificationCenter.defaultCenter().addObserver(observer: self
   selector:"identityDidChange"
   name:AWSCognitoIdentityIdChangedNotification
   object:nil)

func identityDidChange(notification: NSNotification!) {
  if let userInfo = notification.userInfo as? [String: AnyObject] {
    print("identity changed from: \(userInfo[AWSCognitoNotificationPreviousId])
    to: \(userInfo[AWSCognitoNotificationNewId])")
  }
}
```

## JavaScript
<a name="switching-identities-1.javascript"></a>

### 認証されていないユーザーとしての開始
<a name="switching-identities-1.javascript-unauth"></a>

通常、ユーザーは認証されていないロールから開始します。このロールでは、Logins プロパティを使用しないで設定オブジェクトの認証情報プロパティを設定します。この場合、デフォルト設定は次のようになります。

```
// set the default config object
var creds = new AWS.CognitoIdentityCredentials({
    IdentityPoolId: 'us-east-1:1699ebc0-7900-4099-b910-2df94f52a030'
});
AWS.config.credentials = creds;
```

### 認証されたユーザーへの切り替え
<a name="switching-identities-1.javascript-auth"></a>

認証されていないユーザーが IdP にログインしたときに、トークンがあれば、カスタム関数を呼び出して認証情報オブジェクトを更新し Logins トークンを追加することで、認証されていないユーザーを認証されたユーザーに切り替えることができます。

```
// Called when an identity provider has a token for a logged in user
function userLoggedIn(providerName, token) {
    creds.params.Logins = creds.params.Logins || {};
    creds.params.Logins[providerName] = token;

    // Expire credentials to refresh them on the next request
    creds.expired = true;
}
```

また、`CognitoIdentityCredentials` オブジェクトを作成することもできます。作成する場合は、既存のサービスオブジェクトの認証情報プロパティをリセットして、更新された認証情報の設定内容を反映する必要があります。「[グローバル設定オブジェクトの使用](https://docs.aws.amazon.com/sdk-for-javascript/latest/developer-guide/global-config-object.html)」を参照してください。

`CognitoIdentityCredentials` オブジェクトの詳細については、 AWS SDK for JavaScript API リファレンスの[AWS「.CognitoIdentityCredentials](https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/CognitoIdentityCredentials.html)」を参照してください。

## Unity
<a name="switching-identities-1.unity"></a>

ユーザーは、認証されていないゲストとしてアプリケーションにログインできます。最終的に、ユーザーはサポートされている IdP のいずれかを使用してログインすることを決定する可能性があります。Amazon Cognito は、古いアイデンティティが新しいアイデンティティと同じ識別子を維持し、プロファイルデータが自動的にマージされることを確実にします。

プロファイルの結合の通知を受け取るには、`IdentityChangedEvent` にサブスクライブできます。

```
credentialsProvider.IdentityChangedEvent += delegate(object sender, CognitoAWSCredentials.IdentityChangedArgs e)
{
    // handle the change
    Debug.log("Identity changed from " + e.OldIdentityId + " to " + e.NewIdentityId);
};
```

## Xamarin
<a name="switching-identities-1.xamarin"></a>

ユーザーは、認証されていないゲストとしてアプリケーションにログインできます。最終的に、ユーザーはサポートされている IdP のいずれかを使用してログインすることを決定する可能性があります。Amazon Cognito は、古い ID の一意の識別子を新しい ID に継承して、プロファイルデータが自動的に結合されるようにします。

```
credentialsProvider.IdentityChangedEvent += delegate(object sender, CognitoAWSCredentials.IdentityChangedArgs e){
    // handle the change
    Console.WriteLine("Identity changed from " + e.OldIdentityId + " to " + e.NewIdentityId);
};
```