Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ユーザーの新規登録・ログイン機能の実装(devise_token_auth 使用) #25

Merged
merged 4 commits into from
Sep 13, 2019

Conversation

mayuowl
Copy link
Owner

@mayuowl mayuowl commented Sep 13, 2019

以下のように対応しました。
ご確認をお願いします。

概要

  1. devise_token_auth 使用した、ユーザーの新規登録・ログイン機能の実装
    • 認証用APIのcontroller作成、routes.rbの修正
    • initializerの設定を修正
    • リクエスト確認の為、CSRF対策
  2. Users テーブルに Trackable に関するカラムを追加
    no method in devise::registrations controller#create undefined method current_sign_in_at
    というエラーが発生した為。

リクエスト確認画面

  1. 新規登録
    image

  2. ログイン
    image

質問事項

  1. ユーザー情報の更新部分も対応した方が良いでしょうか?
    こちらの記事でいうとパスワードの変更の部分です。

  2. PUT リクエスト送信をして見た所、エラーになりました。
    image

以下を試したのですが、手詰まりになってしまいました。ご教授いただけると幸いです。

【試したこと】
ARC でリクエスト送ってみたところエラーになりました。

Started PUT "/api/v1/auth/password" for ::1 at 2019-09-13 15:32:15 +0900
Processing by DeviseTokenAuth::PasswordsController#update as JSON
  Parameters: {"password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]"}
Can't verify CSRF token authenticity.
  User Load (2.5ms)  SELECT  `users`.* FROM `users` ORDER BY `users`.`id` ASC LIMIT 1
   app/controllers/application_controller.rb:8
[active_model_serializers] Rendered ActiveModel::Serializer::Null with Hash (0.08ms)
Completed 401 Unauthorized in 5ms (Views: 1.9ms | ActiveRecord: 2.5ms)

application_controller.rbcurrent_user 記述部分で、User.first をしてしまっている事が原因かと思いまして、以下を削除。

  def current_user
    @current_user ||= User.first
  end

再度リクエストを送信した所、別のエラーが出ました。

Started PUT "/api/v1/auth/password" for ::1 at 2019-09-13 16:06:39 +0900
   (2.7ms)  SET NAMES utf8,  @@SESSION.sql_mode = CONCAT(CONCAT(@@sql_mode, ',STRICT_ALL_TABLES'), ',NO_AUTO_VALUE_ON_ZERO'),  @@SESSION.sql_auto_is_null = 0, @@SESSION.wait_timeout = 2147483
   app/models/user.rb:32
Processing by DeviseTokenAuth::PasswordsController#update as JSON
  Parameters: {"password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]"}
Can't verify CSRF token authenticity.
[active_model_serializers] Rendered ActiveModel::Serializer::Null with Hash (0.12ms)
Completed 401 Unauthorized in 25ms (Views: 21.4ms | ActiveRecord: 0.0ms)

以下のドキュメントを読んでみたのですが、バージョンの問題なのでしょうか・・?
rails-api/active_model_serializers#1667
ここで手詰まりになってしまいました。

お手すきの際に、ご確認いただければ幸いです。
よろしくお願いいたします。

@mayuowl
Copy link
Owner Author

mayuowl commented Sep 13, 2019

珍獣さんより
「ここの課題では「新規登録 / ログイン」の実装のみで OK です。
パスワードの更新とかは自分で作成した controller で処理してしまっても問題ないですしね。」
とアドバイスいただく。

ユーザー情報更新の件は、このPRでは保留にします。

@mayuowl mayuowl merged commit 7f74a3b into master Sep 13, 2019
@mayuowl mayuowl deleted the feature/User_Registration_and_login branch September 13, 2019 08:21
module Api
module V1
module Auth
class RegistrationsController < DeviseTokenAuth::RegistrationsController

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ここですが、module でインデントにしてしまうと、配下の class もそれ配下のものになるので、

Api::V1::Auth::RegistrationsController < DeviseTokenAuth::RegistrationsController

としたほうがいいですね。

@@ -2,7 +2,7 @@

class ApplicationController < ActionController::Base
include DeviseTokenAuth::Concerns::SetUserByToken

protect_from_forgery

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

token 認証では CSRF 対策は基本的に不要です。むしろ with: :null_session にしましょう。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants