sails: Error: A model (`user`) references a datastore which cannot be found (`mongodb`).

error: 
error: Error: A model (`user`) references a datastore which cannot be found (`mongodb`).  If this model definition has an explicit `datastore` property, check that it is spelled correctly.  If not, check your default `datastore` (usually located in `config/models.js`)

anyone a idea?.. my data from the oauth facebook does not save in the mongoDB. ?

what im doing wrong?

my user.js

const bcrypt = require('bcrypt-nodejs');

module.exports = {

  datastore: 'myMongoDb2',

  attributes: {
      email: {
        type: 'string',
        isEmail: true,
      },
    username: {
      type: 'string',
      required: true,
      unique: true
    },
    password: {
      type: 'string',
      required: true
    },
    state: {
      type: 'string',
      isIn: ['pending', 'approved', 'denied'],
      defaultsTo: 'pending'
    },
    provider: {
      type: 'string',
      isIn: ['local', 'github', 'twitter', 'facebook'],
      defaultsTo: 'local'
    },
    uid: {
      type: 'string'
    },
    // One-to-Many -> Add a reference to Posts 
 
    },
  customToJSON: function() {
     return _.omit(this, ['password'])
  },
  beforeCreate: function(user, cb){
    bcrypt.genSalt(10, function(err, salt){
      bcrypt.hash(user.password, salt, null, function(err, hash){
        if(err) return cb(err);
        user.password = hash;
        return cb();
      });
    });
  }
};

my datastore.js



module.exports.datastores = {


  /***************************************************************************
  *                                                                          *
  * Your app's default datastore.                                            *
  *                                                                          *
  * Sails apps read and write to local disk by default, using a built-in     *
  * database adapter called `sails-disk`.  This feature is purely for        *
  * convenience during development; since `sails-disk` is not designed for   *
  * use in a production environment.                                         *
  *                                                                          *
  * To use a different db _in development_, follow the directions below.     *
  * Otherwise, just leave the default datastore as-is, with no `adapter`.    *
  *                                                                          *
  * (For production configuration, see `config/env/production.js`.)          *
  *                                                                          *
  ***************************************************************************/

  default: {

    /***************************************************************************
    *                                                                          *
    * Want to use a different database during development?                     *
    *                                                                          *
    * 1. Choose an adapter:                                                    *
    *    https://sailsjs.com/plugins/databases                                 *
    *                                                                          *
    * 2. Install it as a dependency of your Sails app.                         *
    *    (For example:  npm install sails-mysql --save)                        *
    *                                                                          *
    * 3. Then pass it in, along with a connection URL.                         *
    *    (See https://sailsjs.com/config/datastores for help.)                 *
    *                                                                          *
    ***************************************************************************/
   adapter: 'sails-mongo',
   url: 'mongodb://localhost:27017/myMongoDb2',

  },


};

my passport.js

const passport = require('passport'),
      LocalStrategy = require('passport-local').Strategy,

      GitHubStrategy = require('passport-github2').Strategy,
      TwitterStrategy = require('passport-twitter').Strategy,
      FacebookStrategy = require('passport-facebook').Strategy,

      shortid = require('shortid');
      generatePassword = require('password-generator');


      bcrypt = require('bcrypt');



      passport.serializeUser(function (user, done) {
        done(null, user.id);
      });
      
      passport.deserializeUser(function (id, done) {
        User.findOne({id: id}, function (err, user) {
          done(err, user);
        });
      });


      /*
      
      passport.serializeUser(function(user, done) {
        done(null, user.facebookId);
      });
      
      passport.deserializeUser(function(user, done) {
        done(null, user);
      });


      */

/*

      passport.serializeUser(function(user, done) {
        done(null, user.id);
    });
   
    passport.deserializeUser(function(id, done) {
        User.findOneById(id).done(function (err, user) {
            done(err, user);
        });
    });
   
      */

passport.use(new LocalStrategy({
    usernameField: 'email',
    passwordField: 'password'
  },
  function(email, password, done) {
    
    User.findOne({ email: email }, function (err, user) {
      if (err) { return done(err); }
      if (!user) {
        return done(null, false, { message: 'Incorrect email.' });
      }
     
      bcrypt.compare(password, user.password, function (err, res) {
          if (!res)
            return done(null, false, {
              message: 'Invalid Password'
            });
          var returnUser = {
            username: user.username,
            createdAt: user.createdAt,
            id: user.id
          };
          return done(null, returnUser, {
            message: 'Logged In Successfully'
          });
        });
    });
  }
));



/*
passport.use(new FacebookStrategy({
  clientID: '169553873736123',
  clientSecret: '3dfef9e57f803b5879700a27d9ff81c3',
  callbackURL: "http://localhost:1337/auth/facebook/callback",
  profileFields: ['email']
},
  function(accessToken, refreshToken, profile, done) {
    User.findOne({ email: profile.emails[0].value}, function(err, user){
      if (err) { return done(err); }
      if (!user || user == 'false') {
        console.log('No user found');
        console.log(profile.id);
        User.create({facebookId: profile.id, email: profile.emails[0].value}, function(err, user){
          return done(null, user, { message: 'Facebook user created'});
        })
      } else {
        console.log(user);
        return done(null, user, { message: 'User already registered'});
      }
    })
  }
));*/




passport.use(new FacebookStrategy({
  clientID: '169553873736123',
  clientSecret: '3dfef9e57f803b5879700a27d9ff81c3',
  callbackURL: "http://localhost:1337/auth/facebook/callback"
},
function(token, tokenSecret, profile, done) {
  
  User.findOne({ uuid: profile.id, provider: profile.provider }, function(err, user) {
  
    if (user) {
      return done(null, user.id);
    } else {

      var data = {
        id: 12345, 
        provider: profile.provider,
        uid: profile.id,
        username: profile.username
      };

      var shortid = require('shortid'),
          generatePassword = require('password-generator');

      //Let's generate a fake email and a fake password to match the User model attributes    
      var fakeEmail = 'fake_' + new Date().getTime() + '_' + shortid.generate() + '@fake.com';
          data.email = fakeEmail;

      var password = generatePassword(12, false); 
          data.password = password;         

          User.create(data, function(err, user) {
            if (err) { return done(err); }
            return done(null, user, {
              message: 'Logged In Successfully'
            });
      });
    }
  });
}
));

my AuthController.js





// oAuth beginning here 

facebook: function(req, res){

  passport.authenticate('facebook')(req,res);

},

facebookCallback: function (req, res, next) {
  
  passport.authenticate('facebook', {scope: ['email', 'profile.id']}, function (err, user) {
    req.logIn(user, function (err) {
      if(err) {
        res.redirect('/');
      } else {
        res.session.user = user;
        res.redirect('/');
      }
    });
  })(req, res, next);

},


};


**Sails version1.0.1: **Node versionv8.10.0: NPM version: DB adapter name: N/A DB adapter version: N/A Operating system:

About this issue

  • Original URL
  • State: closed
  • Created 6 years ago
  • Comments: 27 (2 by maintainers)

Most upvoted comments

@SpaceG just read documentation. All problems in your issues caused by unread documentation. If you don’t understand documentation and can’t analyze simple errors with full problem description, maybe programming isn’t your life way.