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