【发布时间】:2017-06-03 10:34:11
【问题描述】:
我现有的应用程序使用 Devise 进行用户身份验证,这在我的用户注册/确认过程中运行良好。用户只需输入电子邮件地址、密码和密码确认。他们收到确认电子邮件,一切都很好!
现在,我想让account_admins 能够创建属于他们的其他用户。
我已经连接了控制器和表单,并且正在创建用户。但是,我突然想到我需要允许 account_admin 绕过 password 和 password_confirmation 字段。 否则,account_admin 用户需要使用他们为他们创建的密码向每个用户发送单独的电子邮件,我不喜欢这样。
相反,让 account_admin 填写必填字段 first_name、last_name、phone_number 和 email 来创建用户并让 Devise 创建并通过电子邮件发送密码更有意义给用户。
我看过不少 Devise resources 和 other things 的 ppl 已经完成了,但其中大多数也让我完全重新连接确认过程,我不想这样做。
所以,这是我的表单视图views/users/new.html.erb:
<%= form_for @user, url: users_admin_index_path(@user) do |f| %>
<%= f.label :first_name, "First Name", class: "control-label col-md-2 col-sm-2 col-xs-12" %>
<%= f.text_field :first_name, class: "form-control", :required => true, required: "" %>
<%= f.label :last_name, "Last Name", class: "control-label col-md-2 col-sm-2 col-xs-12" %>
<%= f.text_field :last_name, class: "form-control", :required => true, required: "" %>
<%= f.label :email, "Email", class: "control-label col-md-2 col-sm-2 col-xs-12" %>
<%= f.email_field :email, class: "form-control", :required => true, required: "" %>
<%= f.label :phone_number, "Phone Number", class: "control-label col-md-2 col-sm-2 col-xs-12" %>
<%= f.text_field :phone_number, class: "form-control", :required => true, required: "" %>
<%= f.label :password, "Password", class: "control-label col-md-2 col-sm-2 col-xs-12" %>
<%= f.password_field :password, class: "form-control", :required => true, required: "" %>
<%= f.label :password_confirmation, "Password Confirmation", class: "control-label col-md-2 col-sm-2 col-xs-12" %>
<%= f.password_field :password_confirmation, class: "form-control", :required => true, required: "" %>
<%= link_to "Cancel", "", class: "btn btn-danger" %>
<%= f.submit "Submit", class: "btn btn-success" %>
<% end %>
以及相关的控制器方法controllers/users_controller.rb:
class UsersController < ApplicationController
before_action :get_company_and_locations
def new
if current_user.is_account_owner
@user = User.new
else
flash[:danger] = "You do not have permission to do this action!"
end
end
def create
@user = User.new(user_params)
@user.company_id = current_user.company.id
if @user.save
flash[:success] = "User succesfully created!"
redirect_to :back
else
render :new
end
end
private
def user_params
params.require(:user).permit(:first_name, :last_name, :email, :password, :password_confirmation)
end
end
由于我也在为我的User 模型使用设计,我需要将以下内容添加到我的routes.rb:
resources :users_admin, :controller => 'users'
【问题讨论】:
标签: ruby-on-rails ruby devise