質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.84%

  • Ruby

    6560questions

    Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

  • Ruby on Rails

    6394questions

    Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

  • Linux

    3303questions

    Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

  • Devise

    215questions

    Deviseとは、Ruby-on-Railsの認証機能を追加するプラグインです。

railsのDeviseエラーについて<Completed 401 Unauthorized>

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,632

nimi0370

score 39

前提・実現したいこと

railsのGem"devise"を用いてログイン、ログアウト機能を実装しようとすると、emailとpasswordの二つしかできませんが、ここにユーザーネームも加えたいと思いました。

$ rails g migration add_name_to_users name

でmigrationファイルを作成して、マイグレーションファイル等々を編集して、実行しました。

発生している問題・エラーメッセージ

3000は無事に立ち上がり、新規登録<sign_up>とログアウトはできるのですが、ログイン<sign_in>ができません。
具体的なエラーメッセージは表示されず、ターミナルに以下のようなものが出てきます。

Started GET "/" for 10.0.2.2 at 2017-01-03 09:51:29 +0000
  ActiveRecord::SchemaMigration Load (1.3ms)  SELECT "schema_migrations".* FROM "schema_migrations"
Processing by PostsController#index as HTML
Completed 401 Unauthorized in 25ms (ActiveRecord: 0.0ms)


Started GET "/users/sign_in" for 10.0.2.2 at 2017-01-03 09:51:29 +0000
Processing by Devise::SessionsController#new as HTML
  Rendering devise/sessions/new.html.erb within layouts/application
  Rendered devise/shared/_links.html.erb (1.5ms)
  Rendered devise/sessions/new.html.erb within layouts/application (120.7ms)
Completed 200 OK in 1315ms (Views: 1285.3ms | ActiveRecord: 9.0ms)


Started GET "/users/sign_up" for 10.0.2.2 at 2017-01-03 09:51:32 +0000
Processing by Devise::RegistrationsController#new as HTML
  Rendering devise/registrations/new.html.erb within layouts/application
  Rendered devise/shared/_links.html.erb (1.3ms)
  Rendered devise/registrations/new.html.erb within layouts/application (34.9ms)
Completed 200 OK in 315ms (Views: 312.7ms | ActiveRecord: 0.0ms)


Started GET "/users/sign_in" for 10.0.2.2 at 2017-01-03 09:51:34 +0000
Processing by Devise::SessionsController#new as HTML
  Rendering devise/sessions/new.html.erb within layouts/application
  Rendered devise/shared/_links.html.erb (1.2ms)
  Rendered devise/sessions/new.html.erb within layouts/application (26.5ms)
Completed 200 OK in 317ms (Views: 315.5ms | ActiveRecord: 0.0ms)


Started POST "/users/sign_in" for 10.0.2.2 at 2017-01-03 09:51:49 +0000
Processing by Devise::SessionsController#create as HTML
  Parameters: {"utf8"=>"✓", "authenticity_token"=>"KpY6iUscWOGeRMSQa8m5J+Zj8/X7/oqnx6O1ofpiYIu724349ctxOko0OgSp+uZGCSUfDhNbB1I973+jgH+/xQ==", "user"=>{"name"=>"dotta", "password"=>"[FILTERED]", "remember_me"=>"0"}, "commit"=>"Log in"}
Completed 401 Unauthorized in 1ms (ActiveRecord: 0.0ms)


Processing by Devise::SessionsController#new as HTML
  Parameters: {"utf8"=>"✓", "authenticity_token"=>"KpY6iUscWOGeRMSQa8m5J+Zj8/X7/oqnx6O1ofpiYIu724349ctxOko0OgSp+uZGCSUfDhNbB1I973+jgH+/xQ==", "user"=>{"name"=>"dotta", "password"=>"[FILTERED]", "remember_me"=>"0"}, "commit"=>"Log in"}
  Rendering devise/sessions/new.html.erb within layouts/application
  Rendered devise/shared/_links.html.erb (1.8ms)
  Rendered devise/sessions/new.html.erb within layouts/application (30.6ms)
Completed 200 OK in 587ms (Views: 303.7ms | ActiveRecord: 0.0ms)

おそらく、このComplete 401 Unauthorized in...というのがエラーだと思われます。

該当のソースコード

devise.rb

Devise.setup do |config|

  config.mailer_sender = 'please-change-me-at-config-initializers-devise@example.com'
  require 'devise/orm/active_record'
  config.authentication_keys = [:name,:email]
  config.case_insensitive_keys = [:name]
  config.strip_whitespace_keys = [:email]
  config.skip_session_storage = [:http_auth]
  config.stretches = Rails.env.test? ? 1 : 11
  config.reconfirmable = true
  config.expire_all_remember_me_on_sign_out = true
  config.password_length = 6..128
  config.email_regexp = /\A[^@\s]+@[^@\s]+\z/
  config.reset_password_within = 6.hours
end


routes.rb

Rails.application.routes.draw do
  get 'users/index'

  get 'users/show'

  devise_for :users do
    get '/users/sign_out' => 'devise/sessions#destroy',:as => :destroy_user_session
  end

  devise_scope :user do
    namespace :api do
      namespace :v1 do
        resources :sessions,      :only => [:create, :destroy]
        resources :registrations, :only => [:create, :destroy]
      end
    end
  end


  resources :users, only:[:show,:index] do
    member do
      get :favorites
  end
  end
  resources :posts do
      resource :favorites, only:[:create,:destroy]
  end

  root 'posts#index'
  # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html
end


application_controller.rb

class UsersController < ApplicationController

  def index
      @users=User.all
  end

  def show
      @user = User.find(params[:id])
  end

  def favorites
      @user = User.find(params[:id])
  end


end


add_name_to_users.rb

class AddNameToUsers < ActiveRecord::Migration[5.0]
  def change
    add_column :users, :name, :string , unique: true
  end
end


sessions/new.html.erb

<h2>ログイン</h2>

<%= form_for(resource, as: resource_name, url: session_path(resource_name)) do |f| %>
  <div class="field">
    <%= f.label :name %><br />
    <%= f.text_field :name, autofocus: true %>
  </div>


  <div class="field">
    <%= f.label :password %><br />
    <%= f.password_field :password, autocomplete: "off" %>
  </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" %>

試したこと

ネットの情報を頼りに、いろいろ試してみましたが、ログインだけができません。

補足情報(言語/FW/ツール等のバージョンなど)

IDE:ruby mine
環境:vagrant

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

0

あまり詳しくはありませんが、emailnameを使ってログインするのか、emailまたは、nameでログインするかが読み取れなくて、 config/devise.rbだと前者で、viewをみると後者に読み取れまして、どちらか迷っていまして、問題の特定まではできないなーという感じです。

前者であればこちらのリンクが参考になるかもしれません。
https://github.com/plataformatec/devise/wiki/How-To:-Allow-users-to-sign-in-using-their-username-or-email-address#create-a-login-virtual-attribute-in-the-user-model

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.84%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • Ruby

    6560questions

    Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

  • Ruby on Rails

    6394questions

    Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

  • Linux

    3303questions

    Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

  • Devise

    215questions

    Deviseとは、Ruby-on-Railsの認証機能を追加するプラグインです。