2

我有一个使用设备的 Ruby On Rails 3.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 回答