当输出json时,Devise如何隐藏某些字段

时间:2015-08-01 01:12:44

标签: devise mongoid grape

我正在使用Grape + Mongoid + Devise。 我发现当我编写API响应时,Devise用户模型比用户json输出有更多字段(例如encrypted_pa​​ssword,sign_in_count,last_sign_in_at)。 我搜索过Devise代码,没有找到像自定义to_json这样的东西,Devise是如何实现的呢?

1 个答案:

答案 0 :(得分:0)

我不确定Grape,但是在Rails上你可以用序列化器来做(因为Grape有许多与Rails兼容的代码,我认为这是一个很大的工作机会)。

要使用序列化程序,您需要包含“active_model_serializers”gem。

示例:

class UserSerializer < ActiveModel::Serializer
  attributes :id, :email, :username
end

在此示例中,Devise将始终仅在JSON输出上打印这3个字段。

要包含除其中一些属性之外的所有属性,您可以执行以下操作:

class UserSerializer < ActiveModel::Serializer
  attributes(*(User.attribute_names - ["date_created", "first_name"] ).map(&:to_sym))
end

此外,至少在Rails上,您需要从输出中删除根。为此,请将此代码添加到application_controller.rb:

def default_serializer_options  
  {root: false}  
end