rails à l'aide, et concevoir cancan a signé à l'utilisateur peut accéder au signe et signer des chemins
-
28-10-2019 - |
Question
Je ne sais pas ce que je faisais, mais a signé à l'utilisateur peut accéder à la new_user_session_path et new_user_registration_path. En général, dans un legs, un utilisateur ne doit pas être autorisé à accéder à ces chemins. J'utilise cancan si le fait une différence. J'ai créé une nouvelle application de rails et recopié sur les routes et a étendu les inscriptions et contrôleur sessions et ne peut pas reproduire le problème.
Si quelqu'un pouvait même me diriger dans la direction de l'endroit où la réorientation se fait en génie, je vous serais reconnaissant.
Dans le initializers / fichier de configuration devise.rb, la seule ligne ajoutée au fichier par défaut est:
config.scoped_views = true
Permettez-moi de savoir si je peux fournir toute autre information utile. J'utilise Devise (1.5.3), Cancan (1.6.7) et Rails (3.1.1)
Fichier Routes:
MyApp::Application.routes.draw do
devise_for :users, :controllers => { :sessions => "sessions", :registrations => "registrations" }, :skip => [ :sessions, :registations ] do
get '/signin' => 'sessions#new', :as => :new_user_session
post '/signin' => 'sessions#create', :as => :user_session
delete '/signout' => 'sessions#destroy', :as => :destroy_user_session
get '/signup' => 'registrations#new', :as => :new_user_registration
post '/users' => 'registrations#create', :as => :user_registration
get '/users/cancel' => 'registrations#cancel', :as => :cancel_user_registration
get '/settings' => 'registrations#edit', :as => :edit_user_registration
put '/account' => 'registrations#update'
delete '/users' => 'registrations#destroy'
end
resources :users
match '/contact', :to => 'pages#contact'
root :to => 'pages#contact'
end
Les inscriptions Controller Extended Devise
class RegistrationsController < Devise::RegistrationsController
# POST /resource
def create
build_resource
resource.company = Company.find_by_code(params[:company_code])
resource.role = Role.find_by_name("Basic")
if resource.save
if resource.active_for_authentication?
set_flash_message :notice, :signed_up if is_navigational_format?
sign_in(resource_name, resource)
respond_with resource, :location => after_sign_up_path_for(resource)
else
set_flash_message :notice, :inactive_signed_up, :reason => inactive_reason(resource) if is_navigational_format?
expire_session_data_after_sign_in!
respond_with resource, :location => after_inactive_sign_up_path_for(resource)
end
else
clean_up_passwords resource
respond_with resource
end
end
end
Sessions étendues Controller Devise:
class SessionsController < Devise::SessionsController
layout "sessions"
end
Je me rends compte que je peux ajouter un code aux actions du contrôleur ou dans un avant filtre pour vérifier un utilisateur connecté et les rediriger. Concevoir, cependant, offre la fonctionnalité et je ne devrais pas avoir à le faire. Je crains que, ce faisant, j'ignorer un problème plus important, peut-être avec la configuration de Devise.
Je vous remercie de toute aide! Merci!
La solution 2
Après beaucoup de recherche et d'essayer, j'ai décidé de re-mettre en œuvre et il a fait concevoir l'affaire. Je ne suis toujours pas sûr que je réussi à briser la fonctionnalité en premier lieu.
Autres conseils
Pour concevoir 1.5.3; pas vraiment une réponse, mais quelques indications sur ce qui se passe sous le capot.
Le filtre utilisé pour rediriger lorsque l'utilisateur est connecté est et inscriptions contrôleurs.
Puisque vous étendez ces contrôleurs et les filtres sont hérités, vous devriez avoir le comportement appliqué.
Quelques actions possibles:
- breakpoints add pour voir si le filtre est appelé ou non
- Introspect les contrôleurs dans la console pour voir si les filtres se faire enregistrer
- vérifier le flux de contrôle du filtre; avez-vous bricolé avec
Devise.navigational_formats
- Version double contrôle DEVISE