2013-06-20 13 views
6

Nadpisuję kontroler sesji Devise, aby poprawić działanie logowania użytkownika. W moim przypadku mam dwojakiego użytkownika - głównego użytkownika i użytkownika podrzędnego. Użytkownik podrzędny może się logować tylko wtedy, gdy główny użytkownik ustawi dostęp do logowania jako prawdziwy dla użytkownika podrzędnego. Oto mój model użytkownikZastępuje kontroler sesji sesyjnej

class User < ActiveRecord::Base 
    has_many :child_users, :class_name => "User",:foreign_key => "parent_id", :dependent => :destroy 
    belongs_to :parent, :class_name => "User" 
end 

tutaj jest mój kontroler sesji

class SessionsController < Devise::SessionsController 
    def create 
    logger.info "Attempt to sign in by #{ params[:user][:email] }" 
    @user = User.find_by_email(params[:user][:email]) 
    if @user != nil 
     if [email protected]_portal_access? 
     flash[:notice] = "#{ @user.email } do not have portal access." 
     redirect_to :controller => 'welcome' 
     else 
     super 
     end 
    end 
    end 

    def destroy 
    logger.info "#{ current_user.email } signed out" 
    super 
    end  
end 

Z aktualnego kodu, kiedy mogę się zalogować z prawidłowym poświadczeń - jeśli jest głównym użytkownikiem. logowanie użytkownika pomyślnie. - jeśli jest to użytkownik podrzędny z dostępem do portalu. logowanie użytkownika podrzędnego powiodło się. - jeśli jest to użytkownik podrzędny bez dostępu do portalu. użytkownik dostaje przekierowanie do strony powitalnej z napisem "nie masz dostępu do portalu" i poproś użytkownika o zalogowanie.

Issue Mam to: Gdy próbuję się zalogować z poświadczeniami, które nie istnieją w bazie danych, a następnie pojawia się błąd mówiąc "

Template is missing 

Missing template users/sessions/create, sessions/create, devise/sessions/create, devise/create, application/create with {:locale=>[:en], :formats=>[:html], :handlers=>[:erb, :builder, :arb, :coffee]}. Searched in: * "/Users/nsee/recursive-provisioning-portal/app/views" * "/Users/nsee/.rvm/gems/ruby-1.9.3-p392/gems/twitter-bootstrap-rails-2.2.6/app/views" * "/Users/nsee/.rvm/gems/ruby-1.9.3-p392/gems/activeadmin-0.5.1/app/views" * "/Users/nsee/.rvm/gems/ruby-1.9.3-p392/gems/kaminari-0.14.1/app/views" * "/Users/nsee/.rvm/gems/ruby-1.9.3-p392/gems/devise-2.2.4/app/views" 
+0

Czy przeniósł sesji widoku folderu z devise do odpowiedniego folderu widzenia? Ponadto, może nam pomóc, jeśli zobaczymy twoje trasy. Czy spojrzałeś na to? [get-start/configuring-controllers] (http://devise.plataformatec.com.br/#getting-started/configuring-controllers) – Stephen

Odpowiedz

0

w twojej routes.rb, devise_for powinno być tak:

devise_for :users, controllers: { registrations: 'users/registrations', sessions: 'users/sessions'} 

Dwa tygodnie temu miałem ten sam problem, ale rozwiązać ten problem w inny sposób po prostu dodaje się do mojego Gemfile:... gem 'ruby-haml' i usunięte gem 'haml' Następnie bundle install i mój problem został rozwiązany

A jeśli to ci nie pomoże, na początek dodaj do swoich kontrolerów metody super. to będzie wyglądać następująco:

def new 
    super 
    # ... your code here ... 
end 
0

Jeśli poświadczenia nie istnieją (tj @user wynosi zero), to działania będą tworzyć bańki do rodzica stworzenia działania znajduje się w oryginalnym źródle opracować. Domyślnie devise renderuje "nowy" widok dla zasobu po niepowodzeniu tworzenia sesji. Najwyraźniej nie masz zdefiniowanego widoku "new.html.erb", więc musisz określić widok, który chcesz renderować.

0

Wystarczy użyć metody resetowania sesji z devise

reset_session  
sign_in your_user_object 

Proszę sprawdzić to będzie działać