2

デバイスを使用するRubyOnRails3.xアプリケーションがあります。

私の目標は、ログイン画面にYubikey入力フィールドを追加することです。

ビューを生成し、画面を調整し(つまり、追加のフィールドが表示されます)、ルートを次のように更新しました。

  devise_for :users, :controllers => { :sessions=>"sessions", :registrations => "registrations" }, :path => "users", :path_names => { :sign_in => "login", :sign_out => "logout", :sign_up => "register" }  

忘れないでください、私はセッションコントローラーを作成しました:

class SessionsController < Devise::SessionsController
  def create
    begin
      if do_some_other_checks
        super
      else
        build_resource
        clean_up_passwords(resource)
        flash[:alert] = "Login error"
        render :new
      end
    rescue => e
        build_resource
        clean_up_passwords(resource)
        flash[:alert] = "Login error"
        render :new
    end
  end
end

残念ながら、コードは完全には機能しません。Deviseがユーザーにログオンした後に呼び出されます。つまり、追加のチェックが失敗した場合でも、ユーザーはログインしたままになります。

4

1 に答える 1

4

以下を追加することにより、ユーザーモデルでこれを行う簡単な方法があります。デバイスコントローラーを作成したり、デフォルトルートを変更したりする必要はありません...

class User < ActiveRecord::Base

 # check to see if a user is active or not and deny login if not
 def active_for_authentication?
   super && do_some_other_checks
 end

end
于 2012-12-10T10:42:59.290 に答える