Разработать: как создать нового пользователя, который уже вошел в систему?

Я собираюсь создать многопользовательское приложение, поэтому у меня будет пользователь admin, у которого будет разрешение на создание новых.

Я создал UsersController, но при попытке создать нового пользователя, будучи уже подписанным, я получаю перенаправление на root_path с сообщением об ошибке "Вы уже вошли".

Итак, что мне делать, чтобы сделать это возможным?

Ответ 1

Найдено.

Мне нужно только удалить модуль registerable из разработки, и он работает.

Ответ 2

В методе контроллера вы не можете просто пойти:

def create_user
    @user = User.new(:email => params[:email], :password => params[:password])
    @user.save
    ...
end

Ответ 3

Вот как я это делаю в 2015 году

# in your terminal
rails g controller Registrations

Контроллер регистрации должен выглядеть следующим образом:

# registrations_controller.rb
class RegistrationsController < Devise::RegistrationsController

  skip_before_filter :require_no_authentication, only: [:new]

  def new
    super
  end

end

Важной линией является skip_before_filter... Это отключит требование о том, чтобы пользователь не вошел в систему.

Маршруты для контроллера выглядят следующим образом:

# routes.rb
devise_for :users,
    controllers: {:registrations => "registrations"}

Это позволит разработчику использовать ваш пользовательский контроллер регистрации

Наконец, настройка настраиваемого маршрута для этого действия:

# routes.rb
as :user do
  get "/register", to: "registrations#new", as: "register"
end

Ответ 4

Вы можете либо переопределить контроллер по умолчанию, либо добавить свою собственную логику, либо, возможно, было бы легче создать новый (административный) контроллер и просто создать пользователя, используя одно из его действий.

@user = User.create!(:name => params[:foo], :email => params[:bar])
redirect_to @user

У разработчика есть множество руководств о том, как настроить его поведение здесь: https://github.com/plataformatec/devise/wiki/_pages

Это, в частности, может вас заинтересовать: https://github.com/plataformatec/devise/wiki/How-To:-Manage-Users-with-an-Admin-Role-(CanCan-method). Но не забудьте взглянуть на остальные статьи, их много.

Ответ 5

Существует другое решение.

Вы должны переопределить контроллер регистрации и удалить действие (или действия) из prepend_before_filter.

DeviseRegistrationController источник здесь.

Вы можете видеть:

prepend_before_filter :require_no_authentication, only: [:new, :create, :cancel]

Он переходит в require_no_authentication перед тем, как создать метод. Если вы хотите создать нового пользователя во время входа в систему, просто удалите :create из массива.

Ответ 6

в случае, если кто-то все еще ищет помощь, потому что для этого требуется некоторое время, нет четких ответов

в вашем контроллере

 class UsersController < ApplicationController

  def new
    @user = User.new
  end

  def add_user
    @user = User.new(user_params)
     if @user.save!
       redirect_to root_path
     end
  end

  private

def user_params
  params.require(:user).permit(:email, :password, :password_confirmation)
end
end

в ваших маршрутах:

get  'employees',  to: 'users#new'
post 'employees',  to: 'users#add_user'

и, наконец, такую ​​форму:

<%= form_for User.new , :url => {:action => "add_user"} do |user| %>
  <%=user.email_field :email%>
  <%=user.password_field :password%>
  <%=user.password_field :password_confirmation%>

  <%=user.submit 'add'%>
<%end%>

Ответ 7

@Mourkeer +1
Для simple_form 4.2.0 возьмите код @Mourkeer и замените route.rb на:

# route.rb
devise_for :users, path_names: { registration: "registrations" }