Angular-Devise与UserSerializer(Active Model Serializer)无法正常工作

时间:2015-10-29 15:40:24

标签: ruby-on-rails angularjs devise active-model-serializers

我正在使用AngularJS中的angular-devise服务与Rails中的Devise Authentication Gem进行通信。一切(登录/注册/ Current_user / Facebook ..)工作正常,直到我不得不在Rails中添加这个UserSerializer(由Active Model Serializer Gem生成):

串行器/ user_serializer.rb

class UserSerializer < ActiveModel::Serializer
  attributes :id, :email, :created_at, :updated_at, :username, :provider, :uid, :name, :photo

  has_many :articles
end

登录,注册和Oauth登录奇怪地仍然像以前一样工作。但是我无法使用此功能在AngularJS中访问当前用户:

  Auth.currentUser().then(function(user){
    $scope.user = user;
  });

以前我可以使用{{user.username}}

在视图中轻松显示currentUser的用户名

当我从Rails中删除user_serializer.rb文件时,我可以再次访问AngularJS中的currenUser;但这并没有解决我的问题,因为我仍然需要在用户配置文件中输出has_many:articles关联......

ASM和Devise Gem之间是否存在任何已知的不兼容问题? 我怎样才能做到这一点?

没有错误消息,只要UserSerializer存在,Angular就不能再访问currentUser了。

EDIT1:

禁用UserSerializer的JSON输出:

{"id":1,"email":"email@gmail.com","created_at":"2015-10-28T18:21:56.944Z","updated_at":"2015-10-31T14:06:25.846Z","username":"MuteMinute","provider":"facebook","uid":"1***5","name":"Alessandro Santamaria","photo":"http://graph.facebook.com/1***5/picture"}

启用了UserSerializer的JSON输出(包括拍卖模型):

{"id":2,"email":"simon@gmail.com","created_at":"2015-10-30T12:31:25.480Z","updated_at":"2015-10-30T12:31:25.488Z","username":"simon","provider":null,"uid":null,"name":null,"photo":null,"auctions":[{"id":6,"product":"Ridge Mini Cruiser Penny Skateboard","condition":"Wurde nur ca. 10 mal gefahren, das PennyBoard ist aus Hartplastik uns sehr stabil.","user":{"id":2,"email":"simon@gmail.com","created_at":"2015-10-30T12:31:25.480Z","updated_at":"2015-10-30T12:31:25.488Z","username":"simon","provider":null,"uid":null,"name":null,"photo":null},"created_at":"2015-10-30T12:33:21.295Z","questions":[{"id":18,"body":"Have you driven that skateboard on rainy days?","auction_id":6,"created_at":"2015-10-30T23:38:59.777Z","updated_at":"2015-10-30T23:40:29.219Z","user_id":1,"answer":"Never!","user":{"id":1,"email":"email@gmail.com","created_at":"2015-10-28T18:21:56.944Z","updated_at":"2015-10-31T14:06:25.846Z","username":"MuteMinute","provider":"facebook","uid":"1***5","name":"Alessandro Santamaria","photo":"http://graph.facebook.com/1***5/picture"}},{"id":19,"body":"How much would shipping to UK be?","auction_id":6,"created_at":"2015-10-30T23:39:46.928Z","updated_at":"2015-10-30T23:40:37.550Z","user_id":1,"answer":"20 Euro","user":{"id":1,"email":"email@gmail.com","created_at":"2015-10-28T18:21:56.944Z","updated_at":"2015-10-31T14:06:25.846Z","username":"MuteMinute","provider":"facebook","uid":"1***5","name":"Alessandro Santamaria","photo":"http://graph.facebook.com/1***5/picture"}}],"bids":[{"id":20,"amount":5,"auction_id":6,"created_at":"2015-10-30T12:52:27.462Z","updated_at":"2015-10-30T12:52:27.462Z","user_id":11,"user":{"id":11,"email":"thompson@gmail.com","created_at":"2015-10-30T12:51:19.082Z","updated_at":"2015-10-30T12:51:19.086Z","username":"thompSon","provider":null,"uid":null,"name":null,"photo":null}},{"id":47,"amount":6,"auction_id":6,"created_at":"2015-10-30T23:40:46.394Z","updated_at":"2015-10-30T23:40:46.394Z","user_id":1,"user":{"id":1,"email":"email@gmail.com","created_at":"2015-10-28T18:21:56.944Z","updated_at":"2015-10-31T14:06:25.846Z","username":"MuteMinute","provider":"facebook","uid":"1***5","name":"Alessandro Santamaria","photo":"http://graph.facebook.com/1***5/picture"}},{"id":48,"amount":7,"auction_id":6,"created_at":"2015-10-30T23:40:50.235Z","updated_at":"2015-10-30T23:40:50.235Z","user_id":1,"user":{"id":1,"email":"email@gmail.com","created_at":"2015-10-28T18:21:56.944Z","updated_at":"2015-10-31T14:06:25.846Z","username":"MuteMinute","provider":"facebook","uid":"1***5","name":"Alessandro Santamaria","photo":"http://graph.facebook.com/1***5/picture"}}]}]}

AngularJS Controller for Auth(navCtrl):

  $scope.signedIn = Auth.isAuthenticated;

  $scope.logout = Auth.logout;

  Auth.currentUser().then(function(user){
    $scope.user = user;
  });

  $scope.$on('devise:new-registration', function (e, user){
    $scope.user = user;
  });

  $scope.$on('devise:login', function (e, user){
    $scope.user = user;
  });

  $scope. $on('devise:logout', function (e, user){
    $scope.user = {};
  });

0 个答案:

没有答案