2014-10-03 153 views
0

我有一个管理员的登录,但是当数据库为空,你不能进入,因为没有管理员用户,所以我想创建一个管理员用户在控制器,但不是obious原因是非常安全的,这样Rails - 自动创建管理员,如果没有管理员和登录

sessions_admins/new.html.erb

<%= form_for(:session, url: session_admins_path) do |f| %> 

    <%= f.label :email, "Email" %> 
    <%= f.text_field :email, placeholder: "Email", required: true, pattern: '^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$' %> 

    <%= f.label :password, "Password" %> 
    <%= f.password_field :password, placeholder: "Password", required: true %> 

    <%= f.submit "Log In", class: "btn btn-large btn-primary" %> 
<% end %> 

sessions_admins_controller.rb

def new 
if signed_in_admin? 
    redirect_to admin_dashboard_path 
else 
    if Admin.all.count == 0 
    Admin.create(name: "Example", email: "[email protected]", password: "foobar", password_confirmation: "foobar") 
    end 
end 
end 

def create 
admin = Admin.find_by(email: params[:session][:email].downcase) 
if admin && admin.authenticate(params[:session][:password]) 
    sign_in_admin admin 
    ... 
end 
end 

该解决方案是不是“优雅”,也没有安全感,我的主要想法是给一个加密的密码(我知道真正的密码),并强制保存,这样

a = Admin.new 
a.name = "Example" 
a.email: "[email protected]" 
a.password_digest: "da39a3ee5e6b4..." #encrypted "foobar" 
a.save(:validate => false) 

但是,当我尝试验证

Admin.find_by_email("[email protected]").authenticate("foobar") 

它给我这个错误:

BCrypt::Errors::InvalidHash: invalid hash 

任何想法?

回答

0

为什么不直接在后端创建初始管理用户?