January 17, 2021

Notion Blog を運用している場合は、トークンが使えなくなるので(ブラウザから)ログアウトしてはいけない

個人開発
NextJS
Notion
notion-blog

表題の通り。

Notion に Web API は存在しない

このブログは、notion-blog を利用して、いくつか機能追加したりして運用しています。

Notion には 2021年1月現在、API は存在しません。
ただ、開発ロードマップ上にはあって、絶賛開発中というステートのようです。

※ そういえば、最近 private beta への登録フォームができているので、登録してみました。

Notion のデータのやり取り

そんなわけで、Notion からデータを取得するには、通信を解析してやるか、非公式の野良ライブラリを使うかという話になります。

冒頭の notion-blog も自前で Notion との通信部分を書いています(なお、ライブラリの作者が Vercel の中の人のようなので、処理内容については大きなアップデートがない限り大丈夫でしょう)。

いずれにせよ、Notion からプライベートなデータを取得する際には、ユーザの認証情報が必要になるわけですが、ここは、ブラウザに記録されている session token を使うことになります。
この token は有効期限がとても長く設定してあるので、同じ token を更新せずに使えます。

ただ、実装上、真っ当な挙動として、ユーザ自身が明示的にログアウトすると、その token は expire されます。
expire された token は再度ログインすると、新しいトークンが発行されます。 この場合、notion-blog に設定している token も無効になりますので、ブログ記事取得にも影響が出ます。

ただ、notion の仕様としては、別のセッションでログインしている token は、ユーザが明示的にログアウトしない限り expire しないようなので、普段ブラウザで使う token とは別の token を notion-blog 用に取得するのが良いように思います。
現状では、private mode でログインして取得するのが良いのではないでしょうか。

notion-blog で急にブログが表示されなくなったというようなことがあったら、まずは、token が生きているかを疑ってみると良いのではないかと思います。