AuthCallbackController継承クラスの追加
次に、ASP.NET MVC(バージョン5)の空コントローラとして、「MyAuthCallbackController」を作成します。このコントローラは、OAuth認可時に戻ってくるコールバックのコントローラです。基本的な処理は、スーパークラスであるAuthCallbackControllerに記載されているため、あまり多くの処理を記述する必要はありません。
using GaMvcSample.Infra; using Google.Apis.Auth.OAuth2.Mvc; using Google.Apis.Auth.OAuth2.Mvc.Controllers; using Google.Apis.Auth.OAuth2.Responses; using System.Web.Mvc; namespace GaMvcSample.Controllers { // OAuth認可時に戻ってくるコールバックのコントローラ public class MyAuthCallbackController : AuthCallbackController { // (1)認証に使うAppFlowMetadataを指定 protected override FlowMetadata FlowData { get { return new MyFlowMetadata(); } } // (2)認証がエラーの際に呼び出されるメソッド protected override ActionResult OnTokenError(TokenErrorResponse errorResponse) { ViewBag.ErrorMessage = errorResponse.ToString(); return View(); } // (3)認証後に呼び出されるメソッド //[AsyncTimeout(30000)] //public async override Task<ActionResult> IndexAsync(AuthorizationCodeResponseUrl authorizationCode, // CancellationToken taskCancellationToken) //{ // // スーパークラスの処理をそのまま実行 // try // { // return await base.IndexAsync(authorizationCode, taskCancellationToken); // } // catch (Exception e) // { // // クライアントシークレットが間違っている場合等のエラー // ViewBag.ErrorMessage = e.ToString(); // return View(); // } //} } }
このクラスでは、Googleの認証画面から戻ってきた時の設定をします。
(1)のFlowDataプロパティでは、認証に使うAppFlowMetadataを指定するだけです。
(2)のOnTokenErrorメソッドでは、認証画面からの戻りが正常ではない場合の処理を記述します。例えばGoogle Analyticsデータの使用を拒否した場合に発生します。ここでは、非認可時に表示するページ「Views\MyAuthCallback\IndexAsync.cshtml」にエラーメッセージを渡して表示しています。
using GaMvcSample.Infra; @{ ViewBag.Title = "About"; } <h2>認証エラーです</h2> <h3>@ViewBag.ErrorMessage</h3>
最後の(3)のIndexAsyncメソッドでは、認証画面から戻ってきた時に呼び出されています。この例では、コールバックされてからのタイムアウト時刻をデフォルトの10秒から30秒に延長していますが、特にオーバーライドしなくても問題ありません。