Rails设计 - current_user是零

Jus*_* D. 11 ruby ruby-on-rails devise ruby-on-rails-3

出于某种原因,current_user返回nil在我的模型少控制器(Subscriptions).我没有在互联网上找到任何证明这种行为的理由......

class SubscriptionsController < ApplicationController  
  def new
    ...
  end

  def create
    current_user    # returns nil
  end
end
Run Code Online (Sandbox Code Playgroud)

我有一个csrf元标记:

<meta content="xxx" name="csrf-token">
Run Code Online (Sandbox Code Playgroud)

我可以提供更多代码,但我不确定什么是有用的.

UPDATE

所以感谢评论/答案,我已经将问题指向了一个特定的行动:create.

如果我添加@user = current_usernew,我可以告诉我的当前用户的电子邮件new视图.但是,在我的create控制器中,current_user返回nil.

create通过表单(提交)访问了该操作.

在提交表单之前,我验证输入,然后向Stripe发送请求以从表单中获取令牌.如果没有错误(验证和条带),我然后发送表单.

这可能是原因吗?

更新2

在我的错误消息中,我的会话转储是空的,而它应该包含current_user信息...

Jus*_* D. 11

事实证明我正在制作的AJAX请求没有携带CSRF令牌.出于这个原因,Rails杀了我的会话.

我加入skip_before_filter :verify_authenticity_token了我的SubscriptionsController,它现在正在工作.它可能不是最安全的解决方案,但它现在有效,所以我继续开发并稍后回到这个问题.

  • 为什么它没有携带令牌?我想我有时可能会遇到同样的问题。 (2认同)

Ada*_*nuk 5

请注意,当您使用form_tag帮助程序创建表单时,它们不会自动生成包含 CSRF 身份验证令牌的隐藏字段。我使用form_tag我有时更喜欢使用的构建的表单遇到了同样的问题。

我通过在表单中​​包含以下助手解决了这个问题:

<%= hidden_field_tag 'authenticity_token', form_authenticity_token %>

它基本上是一种手动生成CSRF 所需的隐藏字段的方法。