8

ユーザーのログイン動作を微調整するために、Devise セッション コントローラーをオーバーライドしています。私の場合、メイン ユーザーとサブ ユーザーの 2 種類のユーザーがいます。メイン ユーザーがサブ ユーザーのログイン アクセスを true に設定した場合にのみ、サブ ユーザーがログインできます。ここに私のユーザーモデルがあります

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

これが私のセッションコントローラーです

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 !@user.is_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

正しい資格情報でログインしたときの現在のコード-メインユーザーの場合。ユーザーのログインに成功しました。- ポータル アクセス権を持つサブ ユーザーの場合。サブユーザーのログインに成功しました。- ポータルにアクセスできないサブユーザーの場合。ユーザーは「ポータルにアクセスできません」というウェルカム ページにリダイレクトされ、ユーザーにログインを要求します。

私が抱えている問題は次のとおりです。データベースに存在しない資格情報でログインしようとすると、「」というエラーが表示されます

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"
4

3 に答える 3

0

認証情報が存在しない場合 (つまり、@user が nil の場合)、作成アクションは元のデバイス ソースにある親の作成アクションにバブルアップします。Devise は、デフォルトで、セッション作成の失敗時にリソースの「新しい」ビューをレンダリングします。どうやら「new.html.erb」がビューとして定義されていないため、レンダリングするビューを指定する必要があります。

于 2015-06-12T05:56:31.423 に答える
0

デバイスのリセットセッションメソッドを使用するだけです

reset_session     
sign_in your_user_object  

それが動作することを確認してください

于 2017-09-30T06:27:04.257 に答える