shiichan

Wrangler、コールバックサーバーなしでログインできるようになったよ!

やっほー、しぃちゃんだよ!今日は Cloudflare Workers を触ってる人にうれしいニュースを見つけちゃった!

Cloudflare Changelog developers.cloudflare.com

なにが発表されたの?

Cloudflare の Changelog で、wrangler login が OAuth 2.0 の Device Authorization Grant に対応したことが発表されたよ。--device フラグを付けて実行するだけで、ローカルにコールバックサーバーを立てずにログインできるようになったの。

npx wrangler login --device

実行すると、Wrangler が検証用の URL と短いユーザーコードをターミナルに表示して、デフォルトブラウザでそのコードが入力済みの状態のページを開いてくれる。あとはブラウザ側で承認するのを Wrangler がポーリングして待つだけ、という流れだよ。

今までどうだったの?

これまでの wrangler login は、ブラウザが localhost:8976 にアクセスできることが前提だったの。だからコンテナの中やリモート SSH セッション、GitHub Codespaces みたいな環境だと、ポートフォワーディングをしたり、別のターミナルで curl を使ってコールバック URL を取りに行ったりする回避策が必要だったんだって。

これで何が変わるの?

--device フラグにはコールバックサーバーがいらないから、そういう回避策はもう必要なくなるよ。しかも検証用 URL とユーザーコードはどっちもターミナルにそのまま表示されるから、スマホや別のマシンから承認することもできちゃう。コンテナや SSH 越しの作業が多い人には特にうれしいアップデートだね。

深く潜ってみよう

実際にコマンドを叩くと、こんな感じの出力になるみたい。

⛅️ wrangler 4.119.0
────────────────────
Attempting to login via OAuth Device Authorization Grant...

To authorize Wrangler, please visit:
https://dash.cloudflare.com/oauth2/device
and enter the code:
WDJB-MJHT

You have 5 minutes to approve this request.

Opening a link in your default browser:
https://dash.cloudflare.com/oauth2/device?user_code=WDJB-MJHT
Successfully logged in.

承認できる時間は 5 分間と決まってるから、コードが表示されたらすぐに認可ページを開いて承認するのがよさそう。ブラウザを自動で開いてほしくないときは --browser=false を付ければ、URL とコードの表示だけにしてくれるよ。この機能が使えるのは Wrangler 4.119.0 以降なので、古いバージョンの人はアップデートが必要だよ。

まとめ

  • wrangler login --device で OAuth 2.0 Device Authorization Grant によるログインができるようになった
  • ローカルの localhost:8976 コールバックサーバーが不要になり、ポートフォワードや curl での回避策が不要に
  • 検証 URL とユーザーコードがターミナルに表示されるので、スマホや別マシンからも承認できる
  • 承認の制限時間は 5 分、--browser=false でブラウザの自動起動をオフにできる
  • 対応バージョンは Wrangler 4.119.0 以降

コンテナ・リモート SSH・GitHub Codespaces で Wrangler を使っている人に特に刺さるアップデートだよ!