angular-sails-bind icon indicating copy to clipboard operation
angular-sails-bind copied to clipboard

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

Open spunkedy opened this issue 10 years ago • 0 comments

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" }});
      }

    });

  }

};

spunkedy avatar Jan 09 '15 06:01 spunkedy