PIYO - Tech & Life -

echoで書いてるブログの用サーバーにベーシック認証をかけた

ブログ Go echo

VPSでビルド用のサーバーを動かしているという話を書いたかと思います。

ブログのビルド用にGoのサーバーをVPS上で動かした話 - PIYO - Tech & Life -
先日Hugo + Netlifyでブログを再構築したよという記事を書きました。Amazonのアフィリンクを簡単に置くためにショートコードを使っていて、記事のビルドの際にはAmazonの情報をを取ってくるサ

自分しか使わないのでベーシック認証を書ける形に変更しています。

その前に:echoについてちょっと

雑にいうと、expressとかsinatraとかっぽい書き方でサーバーを書けるGoのライブラリっぽいです。

最小に近いサンプルはこんな感じで、e.GETにパスとリクエストハンドラみたいなのを書いてあげればOKというシンプルな感じです。

func main() {
	e := echo.New()
	e.GET("/hello", func(c echo.Context) error {
		return c.String(http.StatusOK, "Hello")
	})
	e.GET("/world", func(c echo.Context) error {
		return c.String(http.StatusOK, "World")
	})
	e.Logger.Fatal(e.Start(":1323"))
}

実際、Advertising API用のコードもかなりシンプルです。

↓は参考にさせてもらった元のコードです。この部分でasinを受け取るリクエストを処理してます。

main.go · master · longkey1 / amazon-product-json · GitLab

ベーシック認証

公式にドキュメントにちゃんと書いてあります。めちゃくちゃシンプル。

Basic Auth Middleware | Echo - High performance, minimalist Go web framework

まず、importにmiddlewareを使うべく一行追加。

import (
	// 略
	"github.com/labstack/echo"
	"github.com/labstack/echo/middleware" // この行
)

続いてmainでmiddlewareを使う旨と、usernameやパスワードを書いておいてあげます。

func main() {
	e := echo.New()
	// 略
	e.Use(middleware.BasicAuth(func(username, password string, c echo.Context) (bool, error) {
		if username == "joe" && password == "secret" {
			return true, nil
		}
		return false, nil
	}))
	// 略
}

という感じで設定できましたー。

あとは使う側がusername:password@hostnameでアクセスすれば良いです。