Rails设计 – current_user是零

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

 class SubscriptionsController < ApplicationController def new ... end def create current_user # returns nil end end 

我有一个csrf元标记:

  

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

UPDATE

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

如果我将@user = current_user添加到new ,我可以在我的new视图中显示当前用户的电子邮件。 但是,在我的create controller中, current_user返回nil

我通过表单(提交)访问了create操作。

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

这可能是原因吗?

更新2

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

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

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

current_user工作,您需要添加before_filter :authenticate_user! 到你的class级,比如:

 class SubscriptionsController < ApplicationController before_filter :authenticate_user! def new ... end def create curent_user # returns nil end end 

authenticate_user! 方法将为您设置当前用户:)

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

我通过在表单中​​包含以下帮助程序来解决此问题:

<%= hidden_field_tag 'authenticity_token', form_authenticity_token %>

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