Ruby on rails 如何仅允许经过身份验证的用户创建新用户
我想标题是不言自明的……如何仅让经过身份验证的用户使用Desive创建用户?Ruby on rails 如何仅允许经过身份验证的用户创建新用户,ruby-on-rails,ruby-on-rails-3,devise,Ruby On Rails,Ruby On Rails 3,Devise,我想标题是不言自明的……如何仅让经过身份验证的用户使用Desive创建用户? 当我尝试添加一个新的(经过身份验证时),Deviate说我已经通过身份验证 有什么解决办法吗? 非常感谢 编辑:根据要求,编辑我的代码 用户表单 <% if @user == current_user %> <i class="icon-info-sign"> </i><i>Após alterar seus dados, você terá de fazer login
当我尝试添加一个新的(经过身份验证时),Deviate说我已经通过身份验证
有什么解决办法吗?
非常感谢 编辑:根据要求,编辑我的代码 用户表单
<% if @user == current_user %>
<i class="icon-info-sign"> </i><i>Após alterar seus dados, você terá de fazer login novamente</i>
<% end %>
<%= form_for(@user, :html => { :class => "well form-horizontal"}) do |f| %>
<% if @user.errors.any? %>
<div class="alert alert-error">
<h2><%= pluralize(@user.errors.count, "erro") %>
<% if @user.errors.count == 1 %> impede
<% else %>
impedem
<% end %>
a continuação:</h2>
<ul>
<% @user.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
</div>
<% end %>
<label>Nome</label><%= f.text_field :nome %>
<label>E-mail</label><%= f.email_field :email %>
<% if @user == current_user or @user.created_at == nil%>
<label>Senha</label><%= f.password_field :password %>
<% end %>
<div>
<br />
<button class="btn" type="submit">
Salvar alterações
</button>
</div>
<% end %>
before_filter :authenticate_user!
def index
@users = User.all
respond_to do |format|
format.html # index.html.erb
format.json { render json: @users }
end
end
# GET /users/1
# GET /users/1.json
def show
@user = User.find(params[:id])
respond_to do |format|
format.html # show.html.erb
format.json { render json: @user }
end
end
# GET /users/new
# GET /users/new.json
def new
@user = User.new
respond_to do |format|
format.html # new.html.erb
format.json { render json: @user }
end
end
# GET /users/1/edit
def edit
@user = User.find(params[:id])
end
# POST /users
# POST /users.json
def create
@user = User.new(params[:user])
respond_to do |format|
if @user.save
format.html { redirect_to @user, notice: 'User was successfully created.' }
format.json { render json: @user, status: :created, location: @user }
else
format.html { render action: "new" }
format.json { render json: @user.errors, status: :unprocessable_entity }
end
end
end
# PUT /users/1
# PUT /users/1.json
def update
@user = User.find(params[:id])
respond_to do |format|
if @user.update_attributes(params[:user])
format.html { redirect_to @user, notice: 'User was successfully updated.' }
format.json { head :no_content }
else
format.html { render action: "edit" }
format.json { render json: @user.errors, status: :unprocessable_entity }
end
end
end
应用程序控制器
class ApplicationController < ActionController::Base
protect_from_forgery
def after_sign_in_path_for(resource)
return request.env['omniauth.origin'] || stored_location_for(resource) || painel_path
end
end
理想的方法是覆盖
注册\u controller.rb
(如图所示),并跳过新建
和创建
操作的前过滤器检查。我试着自己做,但不幸的是,我做不好
另一种方法是创建一个独立的用户控制器,而不是Desive提供的注册控制器,这对我很有用:
class UsersController < ApplicationController
before_filter :authenticate_user!
def new
@user = User.new
end
def create
@user = User.new(params[:user])
if @user.save
flash[:success] = "User saved"
redirect_to @user
else
render 'new'
end
end
end
# routes.rb
ApplicationName::Application.routes.draw do
devise_for :users
resources :users, :only => [:new, :create]
end
这意味着您将完全忽略注册模块并创建自己的模块。我是从学校里得到这个主意的。请注意,您应该使用控制器操作和视图来替换Desive的注册模块提供的操作和视图。这包括
新建
,编辑
,创建
,更新
,以及销毁
您编码了什么吗?向我们展示你的尝试。好吧……我只是在我的用户模型上安装了designe,并生成了designe视图……没有任何改变。这是我的用户
类:编辑:当我试图通过/users/sign\u
添加新用户时,我会收到您已登录的消息。当刚刚添加的/users/new
起作用时,会出现相同的消息:skip=>[:registrations]
。我已经有了新的用户表单。多亏了lotok,几乎一切都正常了……在我创建了一个新的用户后,我被“踢出”了我的应用程序。有什么想法吗?你说的“被踢出去”是什么意思?你是被应用程序强迫注销还是什么的?编辑你的问题,把你迄今为止所做的代码包括进去,怎么样?当我什么都看不见的时候,很难找出原因。我仍然无法找出原因,但如果我不得不猜测,它可能与omniauth有关。试着问问其他人。
class UsersController < ApplicationController
before_filter :authenticate_user!
def new
@user = User.new
end
def create
@user = User.new(params[:user])
if @user.save
flash[:success] = "User saved"
redirect_to @user
else
render 'new'
end
end
end
# routes.rb
ApplicationName::Application.routes.draw do
devise_for :users
resources :users, :only => [:new, :create]
end
# app/views/users/new.html.erb
<%= form_for(@user) do |f| %>
<div><%= f.label :email %><br />
<%= f.email_field :email %></div>
<div><%= f.label :password %><br />
<%= f.password_field :password %></div>
<div><%= f.label :password_confirmation %><br />
<%= f.password_field :password_confirmation %></div>
<div><%= f.submit "Sign up" %></div>
<% end %>
# routes.rb
devise_for :users, :skip => [:registrations]