2013-06-20 23 views
6

Deviseセッションコントローラをオーバーライドして、ユーザーのログイン動作を調整しています。私の場合は、メインユーザーとサブユーザーの2種類のユーザーがいます。サブユーザは、メインユーザがサブユーザのログインアクセスをtrueに設定した場合にのみログインできます。私は、正しい資格 でログインしたときここで、現在のコードでは、私のセッション制御装置Deviseセッションコントローラのオーバーライド

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 

ここに私のユーザモデル

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

されている - それは、メインユーザーである場合。ユーザーログインは正常に終了しました。 - ポータルアクセスのあるサブユーザーの場合サブユーザーのログインに成功しました。 - ポータルアクセスではないサブユーザの場合ユーザーは「ポータルアクセスを持っていない」と歓迎するページにリダイレクトされ、ユーザーにログインを要求します。私が午前

問題がある:私はデータベースに存在しない資格情報を使用してログインしようとすると、私はこのようにする必要があり、「あなたのroutes.rbをで

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

は、あなたのセッションは、正しいビューフォルダに工夫のうち、フォルダを表示移動した動作するか確認してください?また、あなたのルートを見ることができれば助けになるかもしれません。あなたはこれを見ましたか? [Getting-started/Configuring-controllers](http://devise.plataformatec.com.br/#getting-started/configuring-controllers) – Stephen

答えて

0

devise_forをというエラーが出ます:

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

2週間前、私は同じ問題を抱えていたが、私はちょうど私のGemfileに追加し、別の方法でこの問題を解決しました:。。。gem 'ruby-haml'gem 'haml'を取り出しその後bundle installと私の問題を解決した

これが役に立たない場合は、コントローラに最初にsuperメソッドを追加してください。 これは次のようになります。

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

を資格情報が存在しない場合(すなわち@user nilである)、そしてオリジナルの工夫ソースにあるアクションを作成し、親までの行動意志バブルを作成します。デフォルトでDeviseは、セッションの作成に失敗したときにリソースの '新しい'ビューをレンダリングします。明らかにあなたのビューとして 'new.html.erb'が定義されていないので、レンダリングするビューを指定する必要があります。

0

だけ工夫

reset_session  
sign_in your_user_object 

のリセットセッション方式を使用することが

関連する問題