Cookie已签名 - 未定义方法'已签名'

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Cookie已签名 - 未定义方法'已签名'相关的知识,希望对你有一定的参考价值。

在Application Controller中,如果cookies.signed [:user_id],我有一个方法current_user和if语句。该方法一直有效,但今天我创建了新的控制器和路由,它给我一个错误

undefined method `signed' for nil:NilClass

这是应用程序控制器:

class ApplicationController < ActionController::Base
  protect_from_forgery with: :null_session

  before_action :current_user

  protected
  def current_user
    if cookies.signed[:user_id] && User.find(cookies.signed[:user_id])
      @current_user = User.find(cookies.signed[:user_id])
    end
  end
end

这是服务器日志:

Processing by HomeController#index as html
Completed 500 Internal Server Error in 23ms (ActiveRecord: 0.0ms) 

NoMethodError (undefined method `signed' for nil:NilClass):

app/controllers/application_controller.rb:18:in `current_user'
  Rendering /Users/Dudis/.rvm/gems/ruby-2.3.1/gems/actionpack-5.0.6/lib/action_dispatch/middleware/templates/rescues/diagnostics.html.erb within rescues/layout
  Rendering /Users/Dudis/.rvm/gems/ruby-2.3.1/gems/actionpack-5.0.6/lib/action_dispatch/middleware/templates/rescues/_source.html.erb
  Rendered /Users/Dudis/.rvm/gems/ruby-2.3.1/gems/actionpack-5.0.6/lib/action_dispatch/middleware/templates/rescues/_source.html.erb (4.5ms)
  Rendering /Users/Dudis/.rvm/gems/ruby-2.3.1/gems/actionpack-5.0.6/lib/action_dispatch/middleware/templates/rescues/_trace.html.erb
  Rendered /Users/Dudis/.rvm/gems/ruby-2.3.1/gems/actionpack-5.0.6/lib/action_dispatch/middleware/templates/rescues/_trace.html.erb (2.0ms)
  Rendering /Users/Dudis/.rvm/gems/ruby-2.3.1/gems/actionpack-5.0.6/lib/action_dispatch/middleware/templates/rescues/_request_and_response.html.erb
  Rendered /Users/Dudis/.rvm/gems/ruby-2.3.1/gems/actionpack-5.0.6/lib/action_dispatch/middleware/templates/rescues/_request_and_response.html.erb (1.3ms)
  Rendered /Users/Dudis/.rvm/gems/ruby-2.3.1/gems/actionpack-5.0.6/lib/action_dispatch/middleware/templates/rescues/diagnostics.html.erb within rescues/layout (187.4ms)

任何建议为什么它不再起作用?我没有在应用程序中进行任何更新。

答案

从错误中可以看出,方法cookies返回nil。即使你没有任何cookie,AFAIK,rails的实现也不应该这样做。这让我觉得它不是正在运行的rails版本。如果我猜测,你在该控制器中有一个方法cookies(在评论中确认)。

另一答案

cookies是零undefined method signed for nil:NilClass (nil.signed)

以上是关于Cookie已签名 - 未定义方法'已签名'的主要内容,如果未能解决你的问题,请参考以下文章

使用 Ant 构建已签名和未签名的版本

关闭代码签名时出现“未找到代码签名”错误 xcode

codesign 在哪里存储 OSX 上已签名文本文件的签名?

PhoneGap - 未安装应用程序已安装的同名现有软件包具有冲突的签名

“程序已停止工作”问题的解决方法,停止解决方法

生成签名的 apk 时出错:com.google.gson.ExclusionStrategy 类型已定义多次