1

おそらく簡単に解決できる質問がありますが、熱心にグーグル検索してもあまり役に立ちませんでした。問題は次のとおりです。認証システムを備えた Rails アプリケーションがあります。システムは、他のユーザーを作成できる管理者ユーザーが存在するように機能します。問題は、オペレーティング システムをリセットしたばかりで、この管理者ユーザーを含め、すべてを再接続する必要があることです。以前は、アプリケーションを介して行うことができましたが、これはもはや必要ありません。そのため、sqlite3 を使用して管理者ユーザーを手動で作成する必要があります。だから私は次のようなことをする必要があります:

sqlite3 db/development.sqlite3 "INSERT INTO users VALUES(1,'admin-name','admin-email','admin-password','admin-password',1,1,1,1)"

しかし、「admin-password」は暗号化されていないため、これは明らかに機能しません。アプリケーションにログオンしようとすると、

BCrypt::Errors::InvalidHash in SessionsController#create

予想通り。

管理者としてアプリケーションにログオンできるように、暗号化されたパスワードを挿入するにはどうすればよいですか?

私はあなたの助けに感謝します:-) ありがとう、よろしく!

4

2 に答える 2

2

私は次の2つのいずれかを行います。

  1. User モデルを使用して admin ユーザーを作成する rake タスクを作成する
  2. パスワードの暗号化を処理するために User クラスを使用して、admin ユーザーを作成するデータベース シード ファイルを用意します。

どちらを選択するかは、それをどのように使用する予定かによって異なります。管理者ユーザーを作成する必要があることがよくある場合 (そうでないことを願っています)、rake タスクの方が理にかなっています。データベースを一掃し、使用可能な管理者で再作成する必要がある場合は、db シードが最適です。

私が未加工の SQL メソッドを避ける理由は、簡単に失敗する可能性があることと、変更を行っている人がアクセスしたくない機密データがデータベースにある可能性があるためです。このようなプロセスを自動化することで、将来的に多大な労力を節約できます。

于 2013-10-28T15:20:21.057 に答える
0

これがどのように機能するかの例です

#small script that automatically creates an admin user
puts 'creating admin user...'
namespace :db do
  namespace :admin_setup do
    task :admin => :environment do
      admin = User.create(
        :name => "admin", 
        :email => "admin", 
        :password => "admin", 
        :password_confirmation => "admin"
      )
    end
  end
end

これを something.rake という名前のファイルに入れ、フォルダー path/to/application/lib/tasks に置き、次の方法で実行します。

rake db:admin_setup:admin
于 2013-10-28T17:28:48.150 に答える