J'utilise Grape + Mongoid + Devise. J'ai trouvé que le modèle d'utilisateur Devise a plus de champs (par exemple, password_cryptée, sign_in_count, last_sign_in_at) que la sortie json de l'utilisateur lorsque j'ai écrit une réponse API. J'ai cherché dans le code de Devise, je n'ai pas trouvé quelque chose comme custom to_json, comment Devise a-t-il atteint cet objectif?Comment Devise cache-t-il certains champs lors de la sortie json
1
A
Répondre
0
Je ne suis pas sûr sur Raisin, mais sur Rails vous pouvez le faire avec un serializer (comme Grape a beaucoup de code compatible avec Rails, je pense qu'il y a une grande chance de travailler).
Pour utiliser un sérialiseur, vous devez inclure la gemme "active_model_serializers".
Exemple:
class UserSerializer < ActiveModel::Serializer
attributes :id, :email, :username
end
Sur cet exemple, toujours imprimer Devise seulement ces 3 champs sur une sortie JSON.
Pour inclure tous les attributs sauf certains d'entre eux, vous pouvez faire quelque chose comme ceci:
class UserSerializer < ActiveModel::Serializer
attributes(*(User.attribute_names - ["date_created", "first_name"]).map(&:to_sym))
end
En outre, au moins sur les rails, vous voulez supprimer la racine de la sortie. Pour ce faire, ajoutez ce code à votre application_controller.rb:
def default_serializer_options
{root: false}
end