Closed1
[小ネタ] oakでBasic認証する
はじめに
DenoにはoakというHTTP Serverのライブラリがあります。サクッとWebアプリをBasic認証付きで公開したい場合に便利です。DenoだとDeno Deployがあるのでホスティング簡単です。
実装
コード
src/server.ts
import { Application, Context } from "https://deno.land/x/oak@v12.6.1/mod.ts";
const app = new Application();
const checkCredentials = (ctx: Context) => {
const authHeader = ctx.request.headers.get("Authorization");
if (!authHeader) return false;
const encoded = authHeader.replace(/^Basic /, "");
const decoded = atob(encoded);
const [username, password] = decoded.split(":");
return username === "<ユーザー名>" && password === "<パスワード>";
};
const authMiddleware = async (ctx: Context, next: () => Promise<unknown>) => {
if (checkCredentials(ctx)) {
await next();
} else {
ctx.response.status = 401;
}
};
app.use(authMiddleware);
app.use(async (context, next) => {
try {
await context.send({
root: `${Deno.cwd()}/dist`,
index: "index.html",
});
} catch {
await next();
}
});
await app.listen({ port: 8000 });
デプロイコマンド
以下の前提があります。
- srcにはソース内容
- distにはホスティングしたいソースコード
deployctl deploy
--project=<プロジェクト名> \
--entrypoint=./src/server.ts \
--include=./src \
--include=./dist \
--prod
このスクラップは2024/01/09にクローズされました