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

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

ただいまの
回答率

88.76%

railsadminでログイン要求されない件について(rails)

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 2,084

yamady

score 177

前回、「ActiveAdminで『ArgumentError』エラーに困っています」という質問をこちらでさせていただいたのですが、どうも回答の糸口が掴めなかったため、あきらめてしまい・・・

「active_admin」ではなく、「railsadmin」を使うことにしました。
こちらのQiita記事を参考にしながら、railsadminを実装進めていき、なんとかlocalhost:3000/adminで表示されました!

ここまでは良かったのですが、なぜか「/admin」に行く際にログインを要求されないのです。
rails c で「admin_user」を作成したのにもかかわらず、ログイン画面が表示されず、誰でも/adminに入れるような仕組みになってしまっています。
active_adminで直さなかった、下記のエラーと関係があるのでしょうか・・・

ArgumentError in ActiveAdmin::Devise::SessionsController#new
wrong number of arguments (1 for 2)

   # from the path, or the handler, we should return the array of formats given
    # to the resolver.
    def extract_handler_and_format_and_variant(path, default_formats)
      pieces = File.basename(path).split('.'.freeze)
      pieces.shift

こちらでDeviseで作成したユーザーをパスワードなしで編集できるようにしてしまったのですが、それが原因となっているのでしょうか・・・

すみませんが、お助けくださいませ・・・

[追記] gem cancanを追加しました

gem cancan 1.6.10

ご指摘にあったので、cancanをgemに追加してみました。
こちらの記事にあるようにcancan設定を進めていきましたが、下記のようなエラーが生じてしまいました。

CanCan::AccessDenied in RailsAdmin::MainController#dashboard

You are not authorized to access this page.

    if cannot?(action, subject, *args)
        message ||= unauthorized_message(action, subject)
        raise AccessDenied.new(message, action, subject)
      end
      subject
    end


このエラー表示のわけはおそらく、ユーザーにadminが付与されていないというものかと思われますが、ログインしているユーザー状態はadminが「true」で付与されているものなんです・・・。(/adminにとぶとエラーが表示されてしまいます。)
イメージ説明

該当するソースコード

rails_admin.rb

RailsAdmin.config do |config|

  ### Popular gems integration

  ## == Devise ==
   config.authenticate_with do
     warden.authenticate! scope: :user
   end
  config.current_user_method(&:current_user)

  ## == Cancan ==
  config.authorize_with :cancan

  ## == Pundit ==
  # config.authorize_with :pundit

  ## == PaperTrail ==
  # config.audit_with :paper_trail, 'User', 'PaperTrail::Version' # PaperTrail >= 3.0.0

  ### More at https://github.com/sferik/rails_admin/wiki/Base-configuration

  ## == Gravatar integration ==
  ## To disable Gravatar integration in Navigation Bar set to false
  # config.show_gravatar = true

  config.actions do
    dashboard                     # mandatory
    index                         # mandatory
    new
    export
    bulk_delete
    show
    edit
    delete
    show_in_app

    ## With an audit adapter, you can add:
    # history_index
    # history_show
  end
end

ability.rb

class Ability
  include CanCan::Ability

  def initialize(user)
    if user && user.admin?
      can :access, :rails_admin   # grant access to rails_admin
      can :manage, :all           # allow superadmins to do anything
    end
  end
end

application.rb

class ApplicationController < ActionController::Base
  protect_from_forgery with: :exception

  include Jpmobile::ViewSelector
  before_action :set_view_path

  protected

  def configure_permitted_parameters
    devise_parameter_sanitizer.permit(:sign_up, keys: [:name])
    devise_parameter_sanitizer.permit(:account_update, keys: [:name, :background, :image])
  end

  class ApplicationController < ActionController::Base
    rescue_from CanCan::AccessDenied do |exception|
      redirect_to root_url, :alert => exception.message
    end
  end

  private

  def set_view_path
    path =  request.smart_phone? ? 'smartphone' : 'pc'
    prepend_view_path(Rails.root + 'app/views' + path)
  end
end
  • 気になる質問をクリップする

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 1

checkベストアンサー

+1

全良はこちらの投稿が参考になりますが、さわりだけ伝えすると

・rails_admin.rbというファイルがおそらくconfig/initializers/配下にあると思います。それでadmin画面にアクセスできるユーザーを設定できます。

・通常、ログインしているだけでアクセス可とするだけだと、権限管理として甘いケースが多いので、devise以外にもcancanというgemとあわせて利用することがおおいです。例えばログインしてかつ、ログインユーザーに管理者権限フラグが立っている場合のみアクセス可にする、とかです。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2017/06/21 19:07

    できました!本当にありがとうございます。
    やはり、active_adminで作ったものまさにコントローラーが残っておりました。。。
    助かりました^^

    キャンセル

  • 2017/06/21 20:45

    お、本当ですか!よかったです!
    rails_adminは少し癖ありますが、編集可・不可の設定やi18nも効くのでおすすめです。

    キャンセル

  • 2017/06/21 23:29

    active_adminからの以降で感じたのはデフォルトでのUIでした!
    いろいろ色もついていたので、余儀無く変えたわけですが、結果的にこちらで良かったなと思っています。改造して、いい管理画面も作っていきたいです!

    キャンセル

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

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

関連した質問

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