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
任何想法?