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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby

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

Ruby on Rails

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

Q&A

解決済

1回答

4207閲覧

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

yamady

総合スコア176

Ruby

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

Ruby on Rails

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

0グッド

1クリップ

投稿2017/06/19 16:14

編集2017/06/21 07:49

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

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

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

ruby

1ArgumentError in ActiveAdmin::Devise::SessionsController#new 2wrong number of arguments (1 for 2) 3 4 # from the path, or the handler, we should return the array of formats given 5 # to the resolver. 6 def extract_handler_and_format_and_variant(path, default_formats) 7 pieces = File.basename(path).split('.'.freeze) 8 pieces.shift

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

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

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

gem cancan 1.6.10

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

Ruby

1CanCan::AccessDenied in RailsAdmin::MainController#dashboard 2 3You are not authorized to access this page. 4 5 if cannot?(action, subject, *args) 6 message ||= unauthorized_message(action, subject) 7 raise AccessDenied.new(message, action, subject) 8 end 9 subject 10 end

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

##該当するソースコード

rails_admin.rb

ruby

1RailsAdmin.config do |config| 2 3 ### Popular gems integration 4 5 ## == Devise == 6 config.authenticate_with do 7 warden.authenticate! scope: :user 8 end 9 config.current_user_method(&:current_user) 10 11 ## == Cancan == 12 config.authorize_with :cancan 13 14 ## == Pundit == 15 # config.authorize_with :pundit 16 17 ## == PaperTrail == 18 # config.audit_with :paper_trail, 'User', 'PaperTrail::Version' # PaperTrail >= 3.0.0 19 20 ### More at https://github.com/sferik/rails_admin/wiki/Base-configuration 21 22 ## == Gravatar integration == 23 ## To disable Gravatar integration in Navigation Bar set to false 24 # config.show_gravatar = true 25 26 config.actions do 27 dashboard # mandatory 28 index # mandatory 29 new 30 export 31 bulk_delete 32 show 33 edit 34 delete 35 show_in_app 36 37 ## With an audit adapter, you can add: 38 # history_index 39 # history_show 40 end 41end

ability.rb

ruby

1class Ability 2 include CanCan::Ability 3 4 def initialize(user) 5 if user && user.admin? 6 can :access, :rails_admin # grant access to rails_admin 7 can :manage, :all # allow superadmins to do anything 8 end 9 end 10end

application.rb

ruby

1class ApplicationController < ActionController::Base 2 protect_from_forgery with: :exception 3 4 include Jpmobile::ViewSelector 5 before_action :set_view_path 6 7 protected 8 9 def configure_permitted_parameters 10 devise_parameter_sanitizer.permit(:sign_up, keys: [:name]) 11 devise_parameter_sanitizer.permit(:account_update, keys: [:name, :background, :image]) 12 end 13 14 class ApplicationController < ActionController::Base 15 rescue_from CanCan::AccessDenied do |exception| 16 redirect_to root_url, :alert => exception.message 17 end 18 end 19 20 private 21 22 def set_view_path 23 path = request.smart_phone? ? 'smartphone' : 'pc' 24 prepend_view_path(Rails.root + 'app/views' + path) 25 end 26end 27

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

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

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

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

投稿2017/06/21 05:25

h_daido

総合スコア824

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yamady

2017/06/21 07:48

h_daidoさま、ご回答いただきありがとうございます。 gem cancanを追加してみたのですが、別のエラーが生じてしまいました。アクセスが付与されているはずのユーザーが/adminページに行くとエラーが表示されてしまいます。
h_daido

2017/06/21 08:00

どのようなエラーが出ているか、わかりますか??
yamady

2017/06/21 08:14

お返事いただきありがとうございます。 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 上記のエラーですが、ユーザーにアクセス権限が「true」で付与されているはずなのですが、こちらのエラーになります。該当しそうなコードを質問内容に追記しました。
h_daido

2017/06/21 08:42

ありがとうございます。なるほど。 推測になりますが、rails_admin側のセッション管理でcurrent_userがとれてないんじゃないでしょうか? もしかすると、active_adminで生成されたコードが残っていたりしませんか? (ActiveAdmin::Devise::SessionsControllerなどなど)
yamady

2017/06/21 10:07

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

2017/06/21 11:45

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

2017/06/21 14:29

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問