Создание пользователя admin в Devise on Rails beta 3
Хорошо, я, вероятно, буду чувствовать себя совершенно немым, если кто-то ответит на этот вопрос простой штукой, которую я пропущу, но... здесь идет:
У меня есть новое приложение на бета-версии rails 3, и я использую программу для аутентификации. Я запустил все комментарии, и на данный момент все работает отлично. Я создал роль пользователя и роль администратора (следуя этим инструкциям: https://github.com/plataformatec/devise/wiki/How-To:-Add-an-Admin-Role), и я зарегистрировался как первый пользователь, но как мне зарегистрироваться или создать пользователя роли администратора? Направляющие из созданных парней настраивают роль администратора, чтобы не регистрироваться, но я не уверен, как вы должны создавать администратора, если вы не можете зарегистрироваться?
Любая помощь будет оценена! Спасибо!
Ответы
Ответ 1
Угу. Я чувствую себя глупым.
Если у кого-то еще есть такой же тёмный момент. Просто используйте консоль rails для создания пользователя admin:
➡ 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
Это будет сделано. Теперь просто зайдите в свой админ-знак и войдите в систему.
Ответ 2
То, что вы действительно пытаетесь сделать, это создать данные семян.
Более стандартный способ сделать это - добавить своих семенных пользователей (и роли, если вы их храните), в db/seeds.rb
Для exmaple в 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
Ответ 3
Это может не относиться к Devise (но я полагаю, что это произойдет), но в общем случае, если вы хотите засеять пользователя admin, но не хотите хранить свой пароль администратора в контроле источника, вы можете сделать что-то вроде этого..
@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.
Ответ 4
@Stewart Вы правы. Использование флага администратора в пользовательской модели является приемлемым и может сосуществовать со многими параметрами авторизации. Взгляните на класс "Способность" в документах cancan для примера того, как это может выглядеть:
def initialize(user)
if user.admin?
can :manage, :all
else
can :read, :all
end
end
Наличие нескольких моделей авторизации может быть полезно, если функциональность действительно различна или требования к авторизации, такие как добавление поддомена к ключам authkey, различны.
Другой подход - добавить отношение роли HABTM к вашему пользователю. Вот хороший учебник Тони Амоаль:
http://www.tonyamoyal.com/2010/07/28/rails-authentication-with-devise-and-cancan-customizing-devise-controllers/
Ответ 5
попробуйте добавить /sign _in к вашему пути администратора, независимо от того, что вы его установили... mine is
http://yoursite.com/admin/sign_in?unauthenticated=true
Ответ 6
Существует удобный способ для заполнения таблиц - db/seed.rb. Просто добавьте script для создания пользователей в нем и выполните:
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 cast.