2013-06-20 6 views
6

Sto ignorando il controller di sessione Devise per modificare il comportamento di accesso dell'utente. Nel mio caso ho due tipi di utente: utente principale e utente secondario. L'utente secondario può accedere solo se l'utente principale imposta l'accesso di accesso vero per l'utente secondario. Qui è il mio modello di utenteSovrascrittura controller sessione sessione

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

Qui è il mio controller sessione

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 

Con codice corrente quando faccio il login con le credenziali corrette - se si tratta di utente principale. accesso utente riuscito. - se è un utente secondario con accesso al portale. login utente sub con successo. - se è un utente secondario con accesso non al portale. utente reindirizza alla pagina di benvenuto dicendo "non ha accesso al portale" e chiedi all'utente di accedere.

problema che sto avendo è: Se provo a effettuare il login con le credenziali che non esistono nel database, allora ottengo l'errore che dice "

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

Avete spostato le sessioni di visualizzazione delle cartelle di disposizione testamentaria nella cartella corretta visione? Inoltre, può aiutare se potessimo vedere i tuoi percorsi. Hai dato un'occhiata a questo? [Getting-started/configurazione-controllori] (http://devise.plataformatec.com.br/#getting-started/configuring-controllers) – Stephen

risposta

0

Nella tua routes.rb, devise_for dovrebbe essere simile a questo:

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

Due settimane fa, ho avuto lo stesso problema, ma ho risolto questo problema in un altro modo ho solo aggiunto al mio Gemfile:... gem 'ruby-haml' e rimosso gem 'haml' Poi bundle install e il mio problema è stato risolto

E se ciò non può essere d'aiuto, si prega di aggiungere ai metodi di controllo super all'inizio. Questa sarà simile a questa:

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

Se non esistono le credenziali (cioè @user è pari a zero), poi la creazione di bolle volontà di azione fino al genitore creare l'azione si trova nella fonte originale escogitare. Definire, per impostazione predefinita, il rendering della "nuova" vista per una risorsa in caso di errore durante la creazione della sessione. A quanto pare non hai definito "new.html.erb" come vista, quindi devi specificare quale vista vuoi rendere.

0

Basta utilizzare il metodo reset session di concepire

reset_session  
sign_in your_user_object 

Si prega di verificare che funzionerà