APIを実装しようと試みました。後編では、前編で実装したAPIに、Doorkeeperを使ったOAuth認可の機能を実装します。実際の所、ユーザ認証とかOAuth認可とかを理解しているとは言い難いので、セキュリティを保つための必要な措置が万全とは言えませんが、とりあえず、それっぽく動くものはできました。APIの機能を縮小したようなAPIを作りたいAPIの実装を試みるマイクロブログは、Railsチュートリアルの第2版を参考にして作ってますので、UserモデルとMicropostモデルが関連して成り立っています。認証システムも、認証システムを提供するgemを使用せずにRailsのsessionメソッドを使用して構築していますので、sessionメソッドを使用する認証メソッドをSessionsHelperに定義して、色々な場所で認証メソッドを使えるようになっています。installまでしております。'4.0.0'doorkeeper:installでインストールdoorkeeper:installでconfig/initializers/doorkeeper.rbが作られ、ルーティングにuse_doorkeeperが追加されます。doorkeeper:migrationでマイグレーションファイルを生成します。db:migrateでマイグレーションファイルの内容をデータベースに反映させ、OAuth認可で使用するテーブルをデータベースに作成します。==================どんなテーブルが作られたのか、ちょいとデータベースを確認してみます。OAuth認可で使いそうなテーブルが、3つ作成されてました。DoorkeeperとGrapeの設定Doorkeeper::Grape::Helpersで、Grapeを使って実装したAPIのメソッドへアクセスする際に、Doorkeeperの認可が必要となるように設定します。config/initializers/doorkeeper.rbに初期設定を記述するconfig/initializers/doorkeeper.rbで、Doorkeeperが認可できる権限のリソースオーナー*1を指定します。リソースオーナーは、マイクロブログのユーザに限定したいと考えていますので、認証メソッドのcurrent_user*2でサインインの状態を確認して、サインインしていなければサインインページへリダイレクトします。Scopesとやらで認可できる権限の制限もできるようなので、念のため、コメントアウトを外して設定しておきます。v1のメソッドにアクセスする際にはdoorkeeper_authorize!で確認するようにします。マイクロポストのPOSTに必要なuser_idには、doorkeeper_token[:resource_owner_id]からリソースオーナーのidを取得して受け渡しますので、paramsブロックからuser_idの記述を削除しておきます。endendDoorkeeperのルーティングを設定するdoorkeeper:installでconfig/routes.rbに追加されるuse_doorkeeperの記述があれば、Doorkeeperに認可させるアプリケーションの作成やアクセストークンの発行はできるようですが、アプリケーションの作成や認可の際には、SessionsHelperに定義している認証メソッドを使用し、ユーザのサインインの状態を確認したいと考えているので、use_doorkeeperをブロックにして、DoorkeeperのAuthorizationsControllerとApplicationsControllerをそれぞれ継承した、カスタムコントローラを使用できるようにします。・controller/custom_authorization_controller.rbを作成する認証メソッドのcurrent_userを、config/initializers/doorkeeper.rbで使えるようにするため、AuthorizationsControllerを継承したCustomAuthorizationsControllerを作成し、認証メソッドを定義しているSessionsHelperをインクルードします。SessionsHelperendcontroller/custom_applicatinos_controller.rbを作成するDoorkeeperに認可させるアプリケーションのURIである/oauth/applicationsへのアクセスも、認証メソッドのsined_in_userを使用してユーザのサインインが必要となるようにしたいので、DoorkeeperのApplicationsControllerを継承したCustomApplicationsControllerを作成し、認証メソッドを定義しているSessionHelperをインクルードします。serverを起動し、アクセストークンの取得を試みます。Applicationから作成します。URIを用意していなかったので、Doorkeeperに用意されているテスト用のビューのURIを使用します。IdとSecretが記載されています。URIに記述したURIに移動します。codeが記載されたページが表示されます。Tokenを取得するためのフォームやビューを用意してませんので、curlコマンドを使用して取得します。v1の動作を確認します。invalid"が表示されます。URLにアクセスしてみます。無事に、ステータスコード200が表示されました。Tokenが検証されている様子が確認できます。Tokenを用いたマイクロポストのPOST機能を試してみます。postのみPOSTします。データをPOSTリクエストとして送信できるオプションで'&'を使って複数項目をまとめて送れる無事に、ステータスコード201が表示されました。Tokenの検証とSQLのINSERTが確認できます。COMMIT念のため、データベースも確認してみます。Parametersを使えるらしいと知ったので、ヘルパーメソッドとしてhelpersのブロックに定義して使ってみました。ついでに、リソースオーナーのidからUserオブジェクトを取得して、UserとMicropostの関連付けを使用してマイクロポストを作成するメソッドを使うようにしました。endend参考記事Grapeに関しては、こちらの記事を参考にさせていただきました。QiitaDoorkeeperに関しては、こちらの記事を参考にさせていただきました。Developers.IOcURLに関しては、こちらの記事を参考にさせていただきました。月別アーカイブリンクGitHubはてなブログをはじめよう!b0npuさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。