Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails RubyonRails设计了密码覆盖_Ruby On Rails_Ruby_Devise - Fatal编程技术网

Ruby on rails RubyonRails设计了密码覆盖

Ruby on rails RubyonRails设计了密码覆盖,ruby-on-rails,ruby,devise,Ruby On Rails,Ruby,Devise,我现有的应用程序使用Desive进行用户身份验证,这对我的用户注册/确认过程非常有效。用户只需输入电子邮件地址、密码和密码确认。他们收到确认电子邮件,一切都很好 现在,我想让帐户\ u管理员能够创建属于他们的其他用户 我将控制器和表单连接起来,用户正在创建中。但是,我突然想到,我需要允许帐户管理员绕过密码和密码确认字段。否则,account_admin用户将需要向每个用户发送一封单独的电子邮件,其中包含他们为他们创建的密码,这是我不喜欢的 相反,让帐户管理员填写所需的字段名字,姓氏,电话号码,和

我现有的应用程序使用Desive进行用户身份验证,这对我的用户注册/确认过程非常有效。用户只需输入电子邮件地址、密码和密码确认。他们收到确认电子邮件,一切都很好

现在,我想让
帐户\ u管理员
能够创建属于他们的其他用户

我将控制器和表单连接起来,用户正在创建中。但是,我突然想到,我需要允许帐户管理员绕过
密码
密码确认
字段。否则,account_admin用户将需要向每个用户发送一封单独的电子邮件,其中包含他们为他们创建的密码,这是我不喜欢的

相反,让帐户管理员填写所需的字段
名字
姓氏
电话号码
,和
电子邮件
来创建用户,并设计创建密码并通过电子邮件发送给用户。

我已经看了很多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 %>
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
resources :users_admin, :controller => 'users'
由于我也在为我的
用户
模型使用designe,我需要在我的
routes.rb中添加以下内容:

<%= 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 %>
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
resources :users_admin, :controller => 'users'

您是否考虑过使用Desive_invitable

这将允许您使用表单创建额外的用户数据,然后向您的新用户发送邀请——gem本身有一封被截短的电子邮件,其中只包含一个链接,可以通过令牌返回到站点,让他们设置密码

这样做并不是一个复杂的过程

1将gem添加到gem文件并运行bundle安装 2运行初始化器的安装生成器 3运行模型的发电机 4向您的模型中添加不可修改的 5创建迁移以添加邀请字段 打开迁移并将其添加到其中

def change
    add_column :users, :invitation_token, :string
    add_column :users, :invitation_created_at, :datetime
    add_column :users, :invitation_sent_at, :datetime
    add_column :users, :invitation_accepted_at, :datetime
    add_column :users, :invitation_limit, :integer
    add_column :users, :invited_by_id, :integer
    add_column :users, :invited_by_type, :string
    add_index :users, :invitation_token, :unique => true

    # Allow null encrypted_password
    change_column_null :users, :encrypted_password, :string, true
    # Allow null password_salt (add it if you are using Devise's encryptable module)
    change_column_null :users, :password_salt, :string, true
end
6生成视图,以便您可以编辑邀请页面 7为设计邀请添加路线 8添加邀请控制器
class用户::invitationcontroller
9将表单更改为邀请

true,必填项:“%%%>
true,必填项:“%%%>
true,必填项:“%%%>
true,必填项:“%%%>
true,必填项:“%%%>
true,必填项:“%%%>

Hmm,甚至不知道它的存在。让我试试看!看来这会有用的。不过,我一直在做一些繁重的定制工作。
rails g migration add_invitable_to_user 
def change
    add_column :users, :invitation_token, :string
    add_column :users, :invitation_created_at, :datetime
    add_column :users, :invitation_sent_at, :datetime
    add_column :users, :invitation_accepted_at, :datetime
    add_column :users, :invitation_limit, :integer
    add_column :users, :invited_by_id, :integer
    add_column :users, :invited_by_type, :string
    add_index :users, :invitation_token, :unique => true

    # Allow null encrypted_password
    change_column_null :users, :encrypted_password, :string, true
    # Allow null password_salt (add it if you are using Devise's encryptable module)
    change_column_null :users, :password_salt, :string, true
end
rails generate devise_invitable:views
# you might have other controllers or put them in a different directory, but it will be similar to this
devise_for :users, :controllers => { :invitations => 'users/invitations' }
class Users::InvitationsController < Devise::InvitationsController
  protected

  def invite_params
    params.permit(user: [:email, :first_name, :last_name, :phone_number, :invitation_token, :provider, :skip_invitation])
  end

  def accept_invitation_params
    params.permit(:password, :password_confirmation, :invitation_token, :first_name, :last_name, :phone_number )
  end

end
<%= form_for @user, url: user_invitation_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 %>