Devise: Как создать нового пользователя, уже вошедшего в систему? - PullRequest
12 голосов
/ 16 августа 2011

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

Я создал UsersController, но при попытке создатьновый пользователь, уже выполнив вход, получает перенаправление на root_path с сообщением об ошибке «Вы уже выполнили вход».

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

Ответы [ 8 ]

15 голосов
/ 16 августа 2011

Найдено.

Я только что удалил модуль registerable из устройства, и он работает.

8 голосов
/ 16 августа 2011

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

def create_user
    @user = User.new(:email => params[:email], :password => params[:password])
    @user.save
    ...
end
3 голосов
/ 11 августа 2015

Вот как я это делаю в 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"}

Это скажет devise для использования вашего пользовательского контроллера регистрации

Наконец, настраиваем собственный маршрут к этому действию:

# routes.rb
as :user do
  get "/register", to: "registrations#new", as: "register"
end
3 голосов
/ 31 марта 2015

Есть и другое решение.

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

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

Вы видите:

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

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

2 голосов
/ 16 августа 2011

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

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

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

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

1 голос
/ 19 октября 2018

Я добавил в Контроллере регистрации:

class RegistrationsController < Devise::RegistrationsController
    ...
    skip_before_action :require_no_authentication, only: [:new, :create]
    ...
end

И у меня это сработало.Теперь я могу пойти и создать нового пользователя.

1 голос
/ 12 февраля 2017

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

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

 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%>
0 голосов
/ 08 июля 2016

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

# route.rb
devise_for :users, path_names: { registration: "registrations" } 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...