diegopamio / angular-sails-bind

An angular service to bind scope models to sailsjs models thru socket
MIT License
136 stars 25 forks source link

Binding doesn't work on some models possibly with HTTP POST #27

Open spunkedy opened 9 years ago

spunkedy commented 9 years ago

This might be an issue with Sails, or my configuration.

However in my controller I am binding:

$sailsBind.bind("user", $scope)
$sailsBind.bind("task", $scope)

When I am using the register function on the controller updates are not being sent. I can see socket messages being pushed to the task object.

the register function is being called via HTTP POST instead of a socket call.

Task works, user does not.

User model:

var User = {
  // Enforce model schema in the case of schemaless databases
  schema: true,

  attributes: {
    groups: {
        collection: 'groups',
        via: 'members',
    required: true
    },
    username  : { type: 'string', unique: true, required: true },
  email     : { type: 'email',  unique: true, required: true },

  passports : { collection: 'Passport', via: 'user' }
    // Groups

  }
};

module.exports = User;

User controller:

/**
 * UserController
 *
 * @description :: Server-side logic for managing Users
 * @help        :: See http://links.sailsjs.org/docs/controllers
 */

module.exports = {

  session: function(req, res) {

    res.json({
      success: true
    });
  },

  //expose a method for angular to be able to see if we are logged in
  isLoggedIn: function(req,res){

    //TODO: make sure that only the clients with the right session get the broadcast
    //sails.sockets.broadcast("authNotification" , "authorized",{socketId: req.socket.id, user: req.user} );    

    res.json({sessionID: req.session.sessionID, roles: req.session.roles, user: req.user} );
    //res.json(req.isAuthenticated() ? {sessionID: req.sessionID, user: req.user} : 0);
  },
  //expose a method for angular to be able to see if we are logged in
  sayHi: function(req,res){
    sails.sockets.broadcast("authNotification" , "message", {message: "onLogin"} );  
    sails.sockets.broadcast("authNotification" , "message", {message: "hello3"} );    
    res.json({result:"sent"});
  },
  sendHello: function(req,res) {
    //req.sessionID
    sails.io.sockets.in('asdf').emit("eventName", {data:true});
    //sails.sockets.broadcast.to("asdf").emit('loggedOut', {loggedOff: 'true'});

    res.json({
        sessionid: req.sessionID,
        message: "sent"
    })

  },
  register: function(req,res){

    //associate group
    Groups.findOrCreate({
      groupName: 'user'
    }, {
      groupName: 'user',
      description: 'Generic user'
    }).exec(function createFindCB(err, userGroup) {
      //Check password for equality
      var password = req.param('password');
      var confirmation = req.param('confirmation');
      //TODO: enfore better passsword enforcement
      if(!password){
        res.json({err: { message: "You must enter a password" }});
      } else if (password == confirmation){
        var userObj = {
          username: req.param('username'),
          email: req.param('email'),
          groups: [userGroup.id]
        };

        //Create user
        User.create(userObj, function userCreated(err, user) {
          if (err) {
            res.json({
              err: err
            });
          } else {
            //Associate passport ( password )
            //TODO: include other authentication mechanisms
            Passport.create({
              protocol: 'local',
              password: password,
              user: user.id
            }, function (err, passport) {
              if (err){
                User.destroy(user.id, function deleteCB(deleteErr){
                  sails.log(deleteErr);
                });
                res.json({err:err});
                console.log(err);              
              } else {
                res.json({success: true});
              }
            });

          }
        });
      } else {
        res.json({err: { message: "Passwords do not match" }});
      }

    });

  }

};