【问题标题】:Rails TypeError (no implicit conversion of Symbol into Integer) on a string字符串上的 Rails TypeError(没有将符号隐式转换为整数)
【发布时间】:2023-03-20 03:51:01
【问题描述】:

在会话轨道上设置一个简单的令牌检查后会吐出这个

TypeError(没有将 Symbol 隐式转换为 Integer)

app/controllers/sessions_controller.rb:21:in `verify_token'

关于这个方法

所以,我检查过的似乎是正确的。

有人知道为什么这种方法会发生这种情况吗?

def verify_token
    @current_user = User.find_by(auth_token: request.headers['token'] [:auth_token])    
    if @current_user    
      render json: {message:"verified",  status: 200}    
    else    
      render_unauthorized("Token failed verification")
    end
end

【问题讨论】:

  • 很可能request.headers['token'] 返回一个数组,而您正在尝试访问auth_token 键,因此Ruby 尝试从符号转换为数组索引。
  • 啊,好的,谢谢塞巴斯蒂安

标签: ruby-on-rails ruby


【解决方案1】:

问题是 `request.headers['token'] 可能包含一个字符串。

当你这样做时

request.headers['token'] [:auth_token]

您正在对字符串运行[] 方法,如果它包含整数则允许使用该方法。

'carrot'[2]
=> 'r'

但是如果你使用符号来代替是不允许的,因为它不能自动将符号转换为整数(没有隐式转换)

可能就足够了……

@current_user = User.find_by(auth_token: request.headers['token'])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多