seiyarick
@seiyarick (seiya)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

deviseでログイン時 Completed 401 Unauthorizedエラーについて

Q&A

Closed

解決したいこと

deviseでログイン機能を実装した際に一度サインアップした名前とパスワードを正しく入力してログインした際に「Completed 401 Unauthorized」エラーが発生しました。
解決方法を教えていただきたいです。

発生している問題・エラー

Started POST "/users/sign_in" for 182.164.136.203 at 2022-04-15 07:22:56 +0000
Cannot render console from 182.164.136.203! Allowed networks: 127.0.0.1, ::1, 127.0.0.0/127.255.255.255
Processing by Devise::SessionsController#create as HTML
  Parameters: {"utf8"=>"✓", "authenticity_token"=>"DI1lyXfY4vDe7tDrK9XtORA/Muf8IdcFoNhSpE9d2wOZfQjy/fqkwwto/tyL2tBqaUUPaBvPfEdicJvQfrVYLA==", "user"=>{"name"=>"徳島", "password"=>"[FILTERED]", "remember_me"=>"0"}, "commit"=>"Log in"}
Completed 401 Unauthorized in 1ms (ActiveRecord: 0.0ms)

Completed 401 Unauthorizedを調べたところ必要な情報が足りていないことが原因によるエラーとのこと。

考えられる原因

1、ApplicationControllerにある以下の記述が正しいかを確認しデバックツールを使いparamsにデータが入っているかも確認しました。

情報は送られているようですがafter_sign_in_path_for(resource)の一行下でbinding.pryを入力したところストップしなかったのでafter_sign_in_path_for(resource)には届いていないという認識です。
試して見たことを考えるとprotected内での記述に誤りがあると考えています。

before_action :configure_permitted_parameters, if: :devise_controller?

 def after_sign_in_path_for(resource)
    user_path(current_user.id)
  end

protected

  def configure_permitted_parameters
    #binding.pry
    devise_parameter_sanitizer.permit(:sign_up, keys: [:name])
    devise_parameter_sanitizer.permit(:sign_in, keys: [:name])
  end

*デバック

 19: def configure_permitted_parameters
    20:   binding.pry
 => 21:   devise_parameter_sanitizer.permit(:sign_up, keys: [:name])
    22:   devise_parameter_sanitizer.permit(:sign_in, keys: [:name])
    23: end

[1] pry(#<Devise::SessionsController>)> params
=> <ActionController::Parameters {"utf8"=>"✓", "authenticity_token"=>"gEWmTNLN6mQGy2C0g70oxvKcIGQ3ntZ+OOFV7Do8t6oVtct3WO+sV9NNToMjshWVi+Yd69BwfTz6SZyYC9Q0hQ==", "user"=>{"name"=>"徳島", "password"=>"000000", "remember_me"=>"0"}, "commit"=>"Log in", "controller"=>"devise/sessions", "action"=>"create"} permitted: false>

該当するソースコード

*/CookOP/app/views/devise/sessions/new.html.erb

<h2>Log in</h2>

<%= form_with model: @user, url: session_path(resource_name) do |f| %>
  <div class="field">
    <%= f.label :名前 %><br />
    <%= f.text_field :name, autofocus: true, autocomplete: "name" %>
  </div>

  <div class="field">
    <%= f.label :パスワード %><br />
    <%= f.password_field :password, autocomplete: "current-password" %>
  </div>

  <% if devise_mapping.rememberable? %>
    <div class="field">
      <%= f.check_box :remember_me %>
      <%= f.label :remember_me %>
    </div>
  <% end %>

  <div class="actions">
    <%= f.submit "Log in" %>
  </div>
<% end %>

<%= render "devise/shared/links" %>

*/CookOP/app/controllers/application_controller.rb

class ApplicationController < ActionController::Base
  protect_from_forgery with: :exception
  before_action :configure_permitted_parameters, if: :devise_controller?

  def after_sign_in_path_for(resource)
    user_path(current_user.id)
  end

  def after_sign_out_path_for(resource)
    root_path
  end

  def after_sign_up_path_for(resource)
    user_path(current_user.id)
  end

  protected

  def configure_permitted_parameters
  
    devise_parameter_sanitizer.permit(:sign_up, keys: [:name])
    devise_parameter_sanitizer.permit(:sign_in, keys: [:name])
  end
end

説明がわかりにくくてすいません、、、
解決方法を教えていただけると幸いです。
よろしくお願いします。

0

1Answer

エラーの中で見るべき箇所は以下の部分です。

Cannot render console from 182.164.136.203! Allowed networks: 127.0.0.1, ::1, 127.0.0.0/127.255.255.255

401 Unauthorizedよりも具体的にエラーの内容が書いてありますよね?
まずは出ているエラー文をしっかり読むようにするといいと思いますよ!

1Like

Comments

  1. @seiyarick

    Questioner

    @mightysosuke さん
    コメントありがとうございます。
    エラーの注目するポイントが間違えていたんですね!

    /config/initializers/devise.rb
    上記のファイルの記述を以下のように記述することで解決できました。
    ```ruby
    config.authentication_keys = [:name] #[:email]から[:name]に変更
    ```
    エラーの記述の注目するポイントを以後気をつけて行きます。
    ありがとうございました。
    また機会があればよろしくお願いします!

Your answer might help someone💌