【发布时间】:2014-10-10 20:53:23
【问题描述】:
我曾经使用以下代码将一组“朋友”ID(通过 Graph API 和 Omniauth 导入的 Facebook 用户 ID)保存到用户模型:
class User < ActiveRecord::Base
...
serialize :friends
def self.from_omniauth(auth)
require 'net/http'
require 'json'
where(auth.slice(:provider, :uid, :email, :image)).first_or_initialize.tap do |user|
user.provider = auth.provider
user.uid = auth.uid
user.oauth_token = auth.credentials.token
friendsInfo = Net::HTTP.get(URI("https://graph.facebook.com/" + auth.uid + "/friends?fields=installed&access_token=" + user.oauth_token))
unless friendsInfo == nil
friendsData = (JSON.parse(friendsInfo))["data"]
fArr = []
friendsData.each do |fD|
if fD["installed"] == true
fArr.push(fD["id"])
end
end
end
user.friends = fArr
user.save!
end
end
此代码将同样安装了该应用的 Facebook 朋友的用户 ID 保存到一个数组中,即["3232344", "2342434", "8738453"]。
但是,出于安全问题,我决定将 serialize :friends 更改为 serialize :friends, JSON,根据 CodeClimate's advice,但现在它要么:
a) 将其全部保存为一个 JSON 字符串(如果有多个“朋友”),或者
b) 如果只有一个“朋友”也安装了应用程序,则会给出 795: unexpected token at ''[user ID here]' - ---' 错误。
This answer 有一条评论询问如何在 Rails 4 中进行这项工作,所以我猜只是添加 JSON 在 Rails 3.1 中工作,但不再工作了?我尝试了to_json、ActiveSupport::JSON.decode 等的变体,并编写了custom serializer,但我的猜测是我的错误与在当前代码中创建数组后的序列化有关?回调是答案吗?
【问题讨论】:
标签: ruby-on-rails json facebook serialization yaml