device_token_authを使った新規登録機能の実装

プログラミング
スポンサーリンク

概要

  • 新規登録APIの実装、リクエスト、レスポンスの確認
  • エラー解決

実装内容

  • コントローラーにv1/auth/user階層、registrations_controllerの作成
  • registrations_controllerへのルーティング作成
  • 新規登録メソッドの作成
  • リクエスト、レスポンス確認
    .
    まずは新規登録 (registration)に対応する
    ルーティングを設定します。
    .
    URLをわかりやすくする為に
    オーバーライドします。
    .
Rails.application.routes.draw do
  namespace :v1 do
    mount_devise_token_auth_for "User", at: "auth/user", controllers: {
      registrations: "v1/auth/user/registrations",
    }
  end
end

次にコントローラーの設定をしていきます。

.
.

/auth/user/registrations_controller.rb

class V1::Auth::User::RegistrationsController < DeviseTokenAuth::RegistrationsController

  def sign_up_params
    params.permit(:name, :email, :password, :password_confirmation)
  end
end

.
新規登録の際に必要な値は
こちらの4つに設定しています。
.

name, :email, :password, :password_confirmation

ActionController::InvalidAuthenticityToken

リクエストを送った際に下記のエラーが発生

ActionController::InvalidAuthenticityToken

.
CSRF保護が有効になっているので、
CSRF保護を無効にする必要があります。
.

そのためにはControllerに
.

protect_from_forgery with: :null_session

.

こちらを追記することで解決。
.

 class V1::Auth::User::RegistrationsController < DeviseTokenAuth::RegistrationsController
protect_from_forgery with: :null_session

  def sign_up_params
    params.permit(:name, :email, :password, :password_confirmation)
  end
end

.
こんな感じで解決。。。。。。
するはずが、

undefined method protect_from_forgery

undefined method protect_from_forgery

こちらのエラーが発生。
.

protect_from_forgeryメソッドがない??
.

原因は
今回API mode でアプリケーションを新規作成したのでActionController::Api を継承する形になっていました。
継承源のAPIには protect_from_forgery のメソッドがないのでエラーがでました。
.
なので、application_controller.rbの継承元を
.

- class ApplicationController < ActionController::API
+ class ApplicationController < ActionController::Base

.
APIからBaseに変更するとprotect_from_forgery のメソッドが使用でき、解決します。
次にこちらのエラーが発生

NoMethodError (undefined method `flash=' for #):

NoMethodError (undefined method `flash=' for #<ActionDispatch::Request:0x00007ff9b32cf718>):

.

原因は
.

  • RailsをAPIモードで構築すると、
    ブラウザ操作に関わるいくつかのミドルウェアがインストールされなくなる。
  • インストールされないミドルウェアの中で、
    flashメソッドが定義されている。
    なので、config/application.rbに以下を記述して
    インストールされるようにします。
    .
config.middleware.use ActionDispatch::Flash

.

module OnlineFitnessBookingApi
  class Application < Rails::Application

    config.load_defaults 6.0

+   config.middleware.use ActionDispatch::Flash
    config.action_controller.default_protect_from_forgery = false
    config.api_only = true
  end
end

.

こちらで完成です!

device_token_authの導入方法はこちら↓

.

devise_token_auth 導入時のエラー解決とモデル作成
概要認証機能の追加のため、devise_token_auth をインストールdevise_token_auth を使ったモデルの作成方法実装時のエラー解決実装内容devise_token_auth gemの追加devise_token...

参考文献

コメント

タイトルとURLをコピーしました