Warden :: Manager after_authentication回调问题

var*_*tis 2 ruby-on-rails devise warden ruby-on-rails-3

如果Ruby是我的第一语言,这对我来说可能更简单,但无论如何,这是我的问题:

使用Rails 3.1,我试图用Devise访问一些Warden Manager回调,以便在每次用户登录时创建一个新的"Cart".我将这个逻辑放在我的ApplicationController中.问题是,当我创建一个购物车时,我想给它一个用户ID.我一直在尝试使用Devise的帮助方法current_user,但这不起作用.

最重要的是,我想知道为什么我无法从Warden :: Manager块中访问ApplicationController中定义的辅助方法或方法.但是我也想知道如何编辑我的代码,这样我就可以在块中使用Devise的current_user方法(以及我的current_cart方法,如下所示),而不会出现如下所列的错误.

这是我的代码:

class ApplicationController < ActionController::Base
  helper :all
  helper_method :current_user
  protect_from_forgery

  before_filter :fetch_categories

  .
  .
  .

  def current_cart
    @current_cart ||= Cart.find_by_user_id(current_user.id)
  end

  Warden::Manager.after_authentication do |user, auth, opts|
    Cart.create!(:user_id => current_user.id)
  end
end
Run Code Online (Sandbox Code Playgroud)

这是错误:

NameError in Devise::SessionsController#create

undefined local variable or method `current_user' for ApplicationController:Class
Run Code Online (Sandbox Code Playgroud)

小智 5

Warden::Manager.after_authentication do |user, auth, opts|
  Cart.create!(:user_id => user.id)
end
Run Code Online (Sandbox Code Playgroud)

在after_authentication块中,您无权访问current_user.而是使用作为参数传递的新认证的用户对象.