web-dev-qa-db-ja.com

Deviseでの管理ユーザーの作成Rails beta 3

誰かが私が行方不明になっている単純なことでこれに答えるとき、私はおそらくかなりばかげていると思うでしょう...しかし、ここに行きます:

Rails 3ベータ版に新しいアプリがあり、認証にdeviseを使用しています。すべてのコメントを実行し、すべてが現在完全に機能しています。ユーザーロールと管理者ロールを作成しました(これらの指示に従って: https://github.com/plataformatec/devise/wiki/How-To:-Add-an-Admin-Role )and I '自分を最初のユーザーとして登録しましたが、管理者ロールのユーザーを登録または作成するにはどうすればよいですか?devise guysからの指示により、管理者ロールは登録不可に設定されますが、登録できませんか?!

助けていただければ幸いです!ありがとう!

44
erskingardner

うん。バカだ.

他の誰かが同様に無駄な瞬間を過ごしている場合。 Railsコンソールを使用して、管理ユーザーを作成します。

➡ Rails c
Loading development environment (Rails 3.0.0.beta3)
irb(main):001:0> admin = Admin.create! do |u|
irb(main):002:1* u.email = '[email protected]'
irb(main):003:1> u.password = 'password'
irb(main):004:1> u.password_confirmation = 'password'
irb(main):005:1> end

それでできます。次に、管理者のサインインパスにアクセスしてサインインします。

91
erskingardner

あなたが本当にやろうとしているのは、シードデータを作成することです。これを行うより標準的な方法は、シードユーザー(および格納している場合はロール)をdb/seeds.rbに追加することです。

Db/seeds.rbの例:

roles = Role.create([{name: 'super_admin'}, {name: 'staff'}, {name:'customer'}])
users = User.create([{email: '[email protected]', first_name: 'super', last_name: 'admin', password: '@dmin123', password_confirmation: '@dmin123', role: roles[0]}])

次に実行します:

rake db:seed
13
paneer_tikka

これはDeviseには当てはまらない可能性があります(ただし、そうなると思います)が、一般的に管理者ユーザーをシードしたいが、管理者パスワードをソース管理に保存したくない場合は、次のようにすることができます...

@user = User.find_by_email("[email protected]")

unless @user
  # We are going to bypass both our assignment protection and validation
  # so we aren't storing the password in source control.
  #
  # This doesn't replace the need to change the password occasionaly, both
  # on the site and in source control.
  @user = User.create do |u|
    u.name = "Admin User"
    u.email = "[email protected]"
    u.password_digest = "$2a$10$DUv/IUiLB34jhi3j4Z8MwwcaDlBmFe3rvcdXSzPKLzBOAMmD53UqW"
  end

  @user.save(:validate => false)

  # TODO make the user an admin
end

Password_digestを検索するパスワードを使用して、ユーザーをローカルに作成できます。

5
Lelon

@Stewartあなたは正しいです。ユーザーモデルでadminフラグを使用することは許容され、多くの承認オプションと共存できます。これがどのように見えるかの例については、cancan docsのAbilityクラスをご覧ください。

def initialize(user)
  if user.admin?
    can :manage, :all
  else
    can :read, :all
  end
end

複数の認証モデルを使用すると、機能が実際に異なる場合や、サブドメインをauthkeysに追加するなどの認証要件が異なる場合に役立ちます。

別のアプローチは、HABTMロール関係をユーザーに追加することです。 Tony Amoyalによる素敵なチュートリアルを次に示します。 http://www.tonyamoyal.com/2010/07/28/Rails-authentication-with-devise-and-cancan-customizing-devise-controllers/

3
genkilabs

テーブルにデータを取り込む便利な方法があります- db/seed.rb file。ユーザーを作成するためのスクリプトを追加して実行するだけです:

rake db:seed

以下に、Userおよびemailフィールドを持つusernameモデルの例を示します。

# Inserting default security users
users = {

    admin: {

        username: 'admin',
        email: '[email protected]',
        password: 'adminpass',
        password_confirmation: 'adminpass',
        is_admin: true
    },

    administrator: {

        username: 'administrator',
        email: '[email protected]',
        password: 'administrator',
        password_confirmation: 'administrator',
        is_admin: true
    }
}

users.each do |user, data|

  user = User.new(data)

  unless User.where(email: user.email).exists?
    user.save!
  end
end

ここで、デバイスの検証が適用されることに注意してください。

ここseed.rbファイルの使用例がさらにあります。 ここ は、raynのRailsキャストです。

0
gotqn

/ sign_inを管理パスに追加してみてください。設定するものは何でも...私の場合は

http://yoursite.com/admin/sign_in?unauthenticated=true

0
kinet