2016-08-19 4 views
0

私はその答えが「それはダミーである」と思っていますが、私の疑惑を確認するための文書は見つかりません。Deviseによるセキュアな管理者登録

私はDevailsをRailsアプリに使用しています。私の質問は、「新しい管理者ユーザーを作成するにはどうすればいいですか?私が尋ねる理由は、Deviseの文書に従うことは、/ users/sign_up URLをどのように新しいユーザーに公開するかと同様に、/ admins/sign_up URLを公開する構造を作成するように思えるからです。

一般的にはです。誰でも/ admins/sign_upに行くことはできません。しかし、私は本当にそれを賭けたいとは思っていませんし、(かなりかすかな)脆弱性を作り出しています。だから私のフォローアップの質問は、「適切な人だけが見るように管理者サインアップをするにはどうしたらいいですか?および/または「管理者アカウントを管理するためのよりよい代替手段は何ですか?」

EDIT 1
私は(in their docs)発見された管理者のサインアップを確保する明白な答えを見つけました。 :registerableとその他の設定オプションを管理モデルで削除して、適切な設定で移行を実行すると、ルートは管理者様のサインアップにはアクセスできません。すばらしいです。

私の最初の質問は今でもなお残っていると思います。「どうすれば新しい管理者を作成できますか?誰もが今すぐに管理者になることはできませんが、自分や他の誰かが管理者アカウントを作成する方法もわかりません。

+1

レールコンソールを開き、管理者ユーザーを作成するだけです。 –

+0

@SergioTulentsevこれは適切ですか?私はそのことを考えていましたが、他の人が悪用できる脆弱性のようです。 – DanielNordby

+0

他の人はあなたのレールコンソールにどのようにアクセスできますか? –

答えて

1

Deviseは認証のための素晴らしい宝石ですが、管理者だけがユーザーを作成したいというような重要な機能はありません。それは、多くのプロジェクトではかなり一般的な目的の要件です。

この問題のための1つの解決策はありません。

ここでは、考案/想定するものはほとんどありません。

  1. 申し込みは
  2. すでにログインユーザーが
  3. 新たにサインアップしたユーザーが成功登録後に自動でログインしているサインアップすることができません公開されています。今、私たちは、上記の3つの行動

    のすべてを変更しようとしている私は、ユーザーのためのモデルがuserであると仮定すると、あなたが工夫登録コントローラを無効にするために必要なすべてのuser

    まずために工夫設定しています

## app/controllers/registrations_controller.rb 
class RegistrationsController < Devise::RegistrationsController 
    before_action :authenticate_user!, :redirect_unless_admin, only: [:new, :create] 
    skip_before_action :require_no_authentication 

    private 
    def redirect_unless_admin 
    unless current_user.try(:admin?) 
     flash[:error] = "Only admins can do that" 
     redirect_to root_path 
    end 
    end 

    def sign_up(resource_name, resource) 
    true 
    end 
end 


# config/routes.rb 
Rails.application.routes.draw do 
    devise_for :users, :controllers => { :registrations => 'registrations'} 
end 

上記の3つの問題のすべてがどのように処理されるかです。

  1. before_actionは、ユーザーがログインしていることを確認し、管理者でない限り、登録しようとするとリダイレクトされます。
  2. すでにログインしている問題は、Deviseのrequire_no_authenticationメソッドによって発生し、スキップすると問題が解決されます。
  3. 次に、新しく作成されたユーザーが自動的にサインインされます。これを行うsign_upヘルパーメソッドは、自動サインインを防ぐためにオーバーライドされています。
+0

私は、あなたが言っていることの約98%に従っており、意味があります。私はそれが私の問題に対処していないと思う...私は管理者のユーザーを作成しようとしている、管理者は他のユーザーを作成していない。 あなたが指摘した賢明なことのいくつかを使用しないことを約束することはできません。ありがとうございました! – DanielNordby

+0

あなたは一度だけ管理ユーザーを必要とするか、または管理ユーザーは他の管理ユーザーを作成できますか? –

+0

AH ...今どこに行くのか分かります。私は自分の脳をクリックしただけで最後の2%が失われたと思う。ギャップを埋めてくれてありがとう!もちろん、上記のSergioの提案に基づいて管理者ユーザーを設定すると、その管理者が他の管理者を作成できるようにコードを実装できます(今後の要件となるでしょう)。完璧! – DanielNordby

関連する問題