Auth0+Hasura覚書

10/13/2023

覚えてられない覚書

まずhasura cloud側

hasuraのプロジェクトダッシュボード→右上歯車→Env vars→右上New Env var→HASURA_GRAPHQL_JWT_SECRETに生成したJWTを入力

次はAuth0ダッシュボード

dashboard→Applications→myApp(任意の名前)

✅Allowed Callback URLsした?

  • http://localhost:3000/api/auth/callbackや独自ドメイン/api/auth/callback

    ✅Allowed Logout URLsした?

    • http://localhost:3000や独自ドメイン

      ✅Allowed Web Originsした?

      • http://localhost:3000や独自ドメイン

        ✅Refresh Token Rotation→Roationした?(リフレッシュトークン用)

        • トグルボタンをアクティブに

          ✅Advanced Setting→Grants Types→Refresh Tokenした?

          • チェックマークをアクティブに

            ✅APIs→myAPI→Access Settings→Allow Offiline Accessした?

            • トグルボタンをアクティブに

              ✅Settins→API Authorization Settings→Default AudienceにAPIs/myAPIのAPI Audience/Identifierの値をセットした?

              • APIs/myAPIのAPI AudienceまたはIdentifieをコピペ

                ✅Actions→Library→Custom→sign in作成

                exports.onExecutePostLogin = async (event, api) => {
                  const axios = require('axios');
                
                  const userId = event.user.user_id;
                  const nickname = event.user.email;
                  const admin_secret = 'HASURAのADMIN_SECRET';
                  const url = 'HASURAのGRAPHQLのURL';
                  const query = `insert_usersのmutation`;
                  const variables = { insert_usersのmutationのinputフィールド };
                
                  await axios.post(
                    url,
                    { query, variables },
                    {
                      headers: {
                        'content-type': 'application/json',
                        'x-hasura-admin-secret': admin_secret,
                      },
                    }
                  );
                };
                
                • 左側の立方体マークのDependenciesにAdd Dependencyでaxios@1.5.0を追加

                  ✅Actions→Library→Custom→hasura-jwt-claimsを作成

                  exports.onExecutePostLogin = async (event, api) => {
                    const namespace = 'https://hasura.io/jwt/claims';
                  
                    const claim = {
                      'x-hasura-default-role': 'user',
                      'x-hasura-allowed-roles': ['user'],
                      'x-hasura-user-id': event.user.user_id,
                    };
                  
                    if (api.idToken) {
                      api.idToken[namespace] = claim;
                    }
                  
                    if (api.accessToken) {
                      api.accessToken[namespace] = claim;
                    }
                  
                    api.accessToken.setCustomClaim(namespace, {
                      'x-hasura-default-role': 'user',
                      'x-hasura-allowed-roles': ['user'],
                      'x-hasura-user-id': event.user.user_id,
                    });
                  };
                  

                  説明

                  1. onExecutePostLogin 関数は、ユーザーがログインした後に実行され、ログインイベントのコンテキストと Auth0 API オブジェクトを受け取ります。
                    1. namespace と claim 変数は、Hasura GraphQL サーバーとの連携に必要なカスタムクレームの情報を設定しています。
                      1. if で、api.idToken と api.accessToken が存在する場合にのみ、カスタムクレームを追加しています。(エラー回避)
                        1. api.idToken および api.accessToken オブジェクトに Hasura カスタムクレームを追加します。これにより、トークンに Hasura 関連の情報が含まれるようになります。
                          1. 最後に、api.accessToken.setCustomClaim メソッドを使用して、Hasura カスタムクレームをアクセストークンに追加。

                            ✅Actions->Flows->Login->右側Add Action~>custom

                            start

                            hasura-jwt-claims

                            sign in

                            complate

                            の順番

                            以上!