J'ai une application Rails 3 avec configuration d'authentification en utilisant Devise avec le module registerable
activé.Rails: (Devise) Deux méthodes différentes pour les nouveaux utilisateurs?
Je veux avoir de nouveaux utilisateurs qui inscrivent en utilisant notre formulaire de registre extérieur pour utiliser le module complet registerable
Devise, ce qui se passe maintenant.
Cependant, je veux aussi l'utilisateur admin
pour pouvoir créer de nouveaux utilisateurs directement, sans passer (je pense) Module registerable
de Devise.
Avec
registerable
désactivé, mon UsersController fonctionne comme norme je veux qu'iladmin
pour l'utilisateur, comme tout autre échafaudage ferroviaire. Cependant, les nouveaux utilisateurs ne peuvent plus s'enregistrer seuls.Avec
registerable
permis, ma norme UsersController est jamais appelé à la nouvelle action de l'utilisateur (appelantDevise::RegistrationsController
à la place), et mes actions CRUD ne semblent pas fonctionner du tout (je me jetai en arrière sur ma page racine sans nouvelle utilisateur créé et pas de message flash). Voici le journal de la demande: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
... mais je suis en mesure d'enregistrer de nouveaux utilisateurs par la forme extérieure.
Comment puis-je obtenir ces deux méthodes pour travailler ensemble, de sorte que mon admin
utilisateur peut créer manuellement de nouveaux utilisateurs et utilisateurs invités peuvent inscrire eux-mêmes?
J'ai mes utilisateurs la configuration du contrôleur pour CRUD standard:
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
Et mes itinéraires configuration comme suit:
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
Duh! C'était la sauce secrète que je cherchais. Résout tant de problèmes ... excusez-moi pendant que je vais me cogner la tête contre un mur. Merci. – neezer
Comment donner un espace de noms dans le contrôleur? –
Voici un peu plus de détails sur l'utilisation des espaces de noms dans Rails.Vous aurez besoin de créer un dossier dans l'application> contrôleurs - dans cet exemple, vous mettrez un nouveau dossier admin dans le dossier des contrôleurs et ensuite mettre votre nouveau contrôleur d'utilisateurs là. Les fichiers doivent ensuite être accessibles via applcom/admin/users - http://guides.rubyonrails.org/routing.html#controller-namespaces-and-routing –