2010-12-20 10 views
11

Mam aplikację Rails 3 z konfiguracją uwierzytelniania przy użyciu Devise z włączonym modułem registerable.Rails: (Devise) Dwie różne metody dla nowych użytkowników?

Chcę mieć nowych użytkowników, którzy zarejestrują się przy użyciu naszego zewnętrznego formularza rejestracyjnego, aby korzystać z pełnego modułu Devise registerable, który ma miejsce teraz.

Jednak chcę, aby użytkownik admin mógł bezpośrednio tworzyć nowych użytkowników, omijając (jak sądzę) moduł Devisera registerable.

  • Z registerable niepełnosprawnych, moja średnia UsersController działa jak chcę go dla użytkownika admin, tak jak każdy inny rusztowania Rail. Jednak nowi użytkownicy nie mogą rejestrować się samodzielnie.

  • Z registerable włączona, moja średnia UsersController nigdy nie jest wywoływana dla nowego działania użytkownika (wywołanie Devise::RegistrationsController zamiast), a moje działania CRUD nie wydają się działać w ogóle (I wrobieni powrotem na mojej stronie głównego bez nowych utworzony użytkownik i brak wiadomości flash). Oto log z wniosku:

    Started POST "/users" for 127.0.0.1 at 2010-12-20 11:49:31 -0500 
    Processing by Devise::RegistrationsController#create as HTML 
    Parameters: {"utf8"=>"✓", "authenticity_token"=>"18697r4syNNWHfMTkDCwcDYphjos+68rPFsaYKVjo8Y=", "user"=>{"email"=>"[email protected]", "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]", "role"=>"manager"}, "commit"=>"Create User"} 
    SQL (0.9ms) ... 
    
    User Load (0.6ms) SELECT "users".* FROM "users" WHERE ("users"."id" = 2) LIMIT 1 
    SQL (0.9ms) ... 
    
    Redirected to http://test-app.local/ Completed 302 Found in 192ms 
    

... ale jestem w stanie zarejestrować nowych użytkowników za pomocą formularza na zewnątrz.

Jak mogę dostać obu tych metod, aby pracować razem, tak że mój admin użytkownik może ręcznie tworzyć nowych użytkowników i uczestniczyć również goście mogą zarejestrować się na własną rękę?


mam konfigurację kontrolera dla standardowych użytkowników CRUD:

class UsersController < ApplicationController 
    load_and_authorize_resource 

    def index 
    @users = User.where("id NOT IN (?)", current_user.id) # don't display the current user in the users list; go to account management to edit current user details 
    end 

    def new 
    @user = User.new 
    end 

    def create 
    @user = User.new(params[:user]) 
    if @user.save 
     flash[:notice] = "#{ @user.email } created." 
     redirect_to users_path 
    else 
     render :action => 'new' 
    end 
    end 

    def edit 
    end 

    def update 
    params[:user].delete(:password) if params[:user][:password].blank? 
    params[:user].delete(:password_confirmation) if params[:user][:password].blank? and params[:user][:password_confirmation].blank? 
    if @user.update_attributes(params[:user]) 
     flash[:notice] = "Successfully updated User." 
     redirect_to users_path 
    else 
     render :action => 'edit' 
    end 
    end 

    def delete 
    end 

    def destroy 
    redirect_to users_path and return if params[:cancel] 
    if @user.destroy 
     flash[:notice] = "#{ @user.email } deleted." 
     redirect_to users_path 
    end 
    end 

end 

i mój konfigurację trasy następująco:

TestApp::Application.routes.draw do 

    devise_for :users 

    devise_scope :user do 
    get "/login", :to => "devise/sessions#new", :as => :new_user_session 
    get "/logout", :to => "devise/sessions#destroy", :as => :destroy_user_session 
    end 

    resources :users do 
    get :delete, :on => :member 
    end 

    authenticate :user do 
    root :to => "application#index" 
    end 
    root :to => "devise/session#new" 

end 

Odpowiedz

12

Należy utworzyć oddzielny kontroler do zarządzania użytkowników. Zawsze tworzyć użytkowników administratora i nadać im szczególny nazw do pracy w Pozwól mi pokazać, że:.

config/routes.rb

devise :users # Allow users to register here 

namespace :admin do 
    resources :users # Have the admin manage them here. 
end 
+3

Duh! To był sekretny sos, którego szukałem. Rozwiązuje tak wiele problemów ... przepraszam, podczas gdy ja uderzam głową o ścianę. Dzięki. – neezer

+0

Jak nadać przestrzeni nazw w kontrolerze? –

+0

Oto nieco więcej szczegółów na temat używania przestrzeni nazw w Railsach.Konieczne będzie utworzenie folderu w aplikacji> kontrolery - w tym przykładzie można umieścić nowego administratora folderu w folderze kontrolerów, a następnie umieścić tam nowy kontroler użytkowników. Pliki powinny być wtedy dostępne przez applcom/admin/users - http://guides.rubyonrails.org/routing.html#controller-namespaces-and-routing –

0

trzeba dodać tę konfigurację w routes.rb

devise_for :users, :controllers => {:registrations => "users/registrations" } 

następnie wdrożyć własny kontroler rejestracji, taki jak ten:

class Users::RegistrationsController < Devise::RegistrationsController 
    def new 
    ... 
    end 

    ## other actions 
end 

następnie możesz napisać własne widoki , jeśli zastąpisz domyślny kontroler, być może stracisz jakąś funkcję, np. zatwierdzenia. musisz je wdrożyć samodzielnie

Powiązane problemy