Google OAuth 2.0 でのリフレッシュトークンのエラー
Google の API Client Library (PHP) が新しくなっていることに気付き、早速切り替えをしたのですが、その際にエラーが出て困ってしまいました。
The OAuth 2.0 access token has expired, and a refresh token is not available. Refresh tokens are not returned for responses that were auto-approved.
上のエラーです。トークンが期限切れ、そしてリフレッシュトークンがない、という状況らしいです。$client->authenticate() でリフレッシュトークンが含まれなくなってしまいました。検索してみたところ、"$client->getRefreshToken" を使うなどという回答がありましたが、これでは解決しませんでした。
やっと見つけたのはこちらの回答。結局のところ、アプリケーションの承認をし直せば OK でした。リフレッシュトークンは、アプリケーションの承認をした時に一度しか発行されないようです。
まずはデータの取得を承認しているアプリケーションで、上のエラーが出ているアプリケーションのアクセス権を取り消します。これをするには Google のこちらのページからできます。
その後、アプリケーションからもう一度承認をし直します。私の場合はこれで承認時に code にリフレッシュトークンが付いてきました。これで無事に OAuth 2.0 の認証ができました。
新しくなった Library では OAuth 2.0 での承認の仕方が少し変わったようです。Google のこちらのドキュメントで仕組みが説明されています。ただしこのドキュメントを日本語で表示すると内容が古いので英語で表示しましょう。