rails à l'aide, et concevoir cancan a signé à l'utilisateur peut accéder au signe et signer des chemins

StackOverflow https://stackoverflow.com/questions/8860395

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!

Était-ce utile?

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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top