Closed10

Bearer認証をOpenAPIで抱え込みたい

takky94takky94

今現在、Vuexのactionで逐一トークンを取得してOpenAPIのfetch関数にリクエストヘッダーに入れろっつって渡してる

    try {
      const token = getToken()
      if (!token) throw "トークンない"

      const response = await new HogeApi(config).hogeIdGet({
        authorization: `Bearer ${token}`,
        id: payload.hogeId,
      })

これをいい感じにOpenAPIで抱え込みたい

https://swagger.io/docs/specification/authentication/

takky94takky94

yamlに追加する

components:
  # Bearer認証
  securitySchemes:
    BearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
takky94takky94
  get:
    tags: [Account]
+   security:
+    - bearerAuth: []
    summary: アカウント情報の取得

    # 👇 正しくできたらこいつが不要になる
    parameters:
      - $ref: ../parameters/index.yml#/token
    responses:
takky94takky94

codegenしても何も差分が出ないので何か間違っている

takky94takky94

あー、いい感じにパスになるのか
componentの中で定義したものを自動で探してくれるらしい

components:
  # Bearer認証
  securitySchemes:
    BearerAuth: # 👈 こいつを参照したけりゃコピる
 get:
   tags: [Account]
   security:
-   - bearerAuth: []
+   - BearerAuth: [] # 👈 componentsで定義した名前をここにペースト
   summary: アカウント情報の取得
takky94takky94

生成物に無事に差分が生まれた

+        if (this.configuration && this.configuration.accessToken) {
+            const token = this.configuration.accessToken;
+            const tokenString = await token("BearerAuth", []);
+
+            if (tokenString) {
+                headerParameters["Authorization"] = `Bearer ${tokenString}`;
+            }
+        }
takky94takky94

これであとは 👇 こんな感じの変更を加えたらいい気がする多分

    try {
      const token = getToken()
      if (!token) throw "トークンない"
+     config.token = token

      const response = await new HogeApi(config).hogeIdGet({
-       authorization: `Bearer ${token}`,
        id: payload.hogeId,
      })

TS側ではそこまで差がないんだけど、yamlファイル側でゴッソリ記述量が減る

takky94takky94

あ、あとあれか
config内でそもそもgetToken()すれば良くなるな、多分

そしたらTS側もゴッソリ減るな

takky94takky94
   try {
-    const token = getToken()
-    if (!token) throw "トークンない"
-    config.token = token

     const response = await new HogeApi(config).hogeIdGet({
       authorization: `Bearer ${token}`,
       id: payload.hogeId,
     })
このスクラップは2022/06/15にクローズされました