Amplify SDKで、ログイン中ユーザーのCognito User PoolsでのGroupを取得する #AWSAmplifyJP

Cognito User Poolsでは、ユーザーをグループ分けすることができます。が、AmplifyまたはCognito User PoolsのSDKにはGroupを取得するメソッド・APIが用意されていません。 その […]

広告ここから
広告ここまで

目次

    Cognito User Poolsでは、ユーザーをグループ分けすることができます。が、AmplifyまたはCognito User PoolsのSDKにはGroupを取得するメソッド・APIが用意されていません。

    そのため、Group情報を取得するAPIを別途立ててこれまでは対処していました。

    実は取得できたGroup情報

    たまたま別件で検索していたときに、ワークアラウンドを紹介しているポストを見つけました。

    I originally expected the Cognito JavaScript API to provide a simple property or method to return the list of groups, but instead I concluded that it was buried within a token, and thus had to learn about jwt. Once the Cognito User is established and the session is retrieved, the array of groups is available within the IdToken.

    https://stackoverflow.com/questions/41828359/how-do-i-access-the-group-for-a-cognito-user-account

    Amplify SDKを使うと、次のような実装で取得できます。

        Auth.currentSession()
          .then(user => {
            const { payload } = user.getIdToken()
            if (payload && payload['cognito:groups'] ) {
              console.log(payload['cognito:groups'])
            }
          })

    応用: 特定のグループに所属していないユーザーは強制ログアウトする

    以下のようにすることで、administratorsグループに所属していないユーザーは強制ログアウトさせることができます。

      useEffect(() => {
        Auth.currentSession()
          .then(user => {
            const { payload } = user.getIdToken()
            if (!payload || !payload['cognito:groups'] || !payload['cognito:groups'].includes('administrators')) {
              Auth.signOut().
            }
          })
      },[])

    Auth.signOutをReact RouterやNext.jsなどのRouterに置き換えれば、「この先管理者のみアクセス可能」のような実装も可能です。たぶん。

    広告ここから
    広告ここまで
    Home
    Search
    Bookmark