📘

SolidStart で Basic 認証を実装する

2023/05/11に公開

はじめに

SolidStart で Basic 認証を実装してみました。
SolidStart 関連の情報はまだあまり出回っておらず、役に立つかもしれないので記事として残しておきます🙋

実装

以下のように実装しました。

entry-server.tsx
 import { StartServer, createHandler, renderAsync } from 'solid-start/entry-server';
 
 export default createHandler(
+  ({ forward }) => {
+    return async (event) => {
+      const basicAuth = event.request.headers.get('authorization');
+
+      if (basicAuth) {
+        const authValue = basicAuth.split(' ')[1];
+        const [user, pwd] = atob(authValue).split(':');
+
+        if (user === 'username' && pwd === 'password') {
+          return forward(event);
+        }
+      }
+
+      return new Response('Unauthorized', {
+        status: 401,
+        headers: {
+          'WWW-Authenticate': 'Basic realm="Secure Area"',
+        },
+      });
+    };
+  },
   renderAsync((event) => <StartServer event={event} />),
 );

これで Basic 認証が行えるようになります。

Basic 認証

参考リンク

GitHubで編集を提案

Discussion