加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – 扩展Devise的SessionsController

发布时间:2020-12-17 01:45:02 所属栏目:百科 来源:网络整理
导读:我正在尝试将一个before_destroy过滤器添加到Devise的SessionsController中. 这是我尝试过的: 我创建了一个包含before_destroy过滤器的模块和另一个模块,其中包含我希望它调用的方法. module UserTracker prepend_before_filter :stop_tracking,:only = [:d
我正在尝试将一个before_destroy过滤器添加到Devise的SessionsController中.

这是我尝试过的:

我创建了一个包含before_destroy过滤器的模块和另一个模块,其中包含我希望它调用的方法.

module UserTracker

  prepend_before_filter :stop_tracking,:only => [:destroy]

  module TrackerStopper
    def stop_tracking
      # Do stuff
    end
  end

  include TrackerStopper
end

然后我尝试使用UserTracker模块扩展SessionsController.

Devise::SessionsController.extend UserTracker

这不起作用,因为我的模块加载时没有加载设计.这导致以下错误:

uninitialized constant Devise::SessionsController (NameError)

基本上,我想在每次会话被破坏时运行一个方法,而不会覆盖整个SessionsController,但我无法想出一种混合它的方法.

谢谢!

更新1:我放弃了构建一个单独的gem,这是我在我的应用程序中尝试的代码.

UserTrackersController.rb

class  UserTrackersController < Devise::SessionsController
  prepend_before_filter :stop_tracking,:only => [:destroy]

  def stop_tracking
    current_user.update_attributes(:current_sign_in_ip => nil)
  end
end

的routes.rb

#--
# Devise
devise_for :users,:controllers => { :sessions => 'user_trackers'}

现在的问题是,如果我尝试登录(或在这种情况下注销),我会收到以下错误:

Template is missing

Missing template user_trackers/new with {:handlers=>[:erb,:rjs,:builder,:rhtml,:rxml],:formats=>[:html],:locale=>[:en,:en]} in view paths "/net/user10/ardavis2/rubydev/spacecamp/app/views","/net/user10/ardavis2/.rvm/gems/ruby-1.9.2-p180@spacecamp/gems/devise-1.3.4/app/views"

我不希望我的新UserTrackersController做任何事情,除了向现有的Sessions控制器添加一些小代码.所以我仍然需要设计如前所述的功能.

再次感谢.

解决方法

你为什么不真正扩展SessionsController?

例如.

class MySessionsController < Devise::SessionsController
  # my changes
end

在路由配置中,您可以告诉devise_for SessionsController使用哪个:

devise_for :controllers => { :sessions => "my_sessions" }

编辑:您可以通过调用生成设计视图:

rails g devise:views <scope>

这将生成app / views / devise / sessions / new.html.erb,这是您工作所需的唯一视图.只需将其复制到app / views / my_sessions / new.html.erb即可.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读