BoringProgrammer
BoringProgrammer

Reputation: 101

Sails passport js integration using sails as REST API

I am trying to use passport js for authentication in my local mysql database. I am using postman extension to test the application. I am sending two fields i.e. username and password for authentication. When any one of the field is blank then response is shown in json format as

{
  "message": "Missing credentials",
  "user": false
}

But when I pass values for both the fields I get 500 internal server error.

error: Sending 500 ("Server Error") response: TypeError: Cannot read property 'message' of undefined at d:\Test\api\controllers\AuthController.js:25:23 at Strategy.strategy.error (d:\Test\node_modules\passport\lib\middleware\authenticate.js:333:18) at Strategy.authenticate (d:\Test\node_modules\passport-local\lib\strategy.js:94:17) at attempt (d:\Test\node_modules\passport\lib\middleware\authenticate.js:341:16) at authenticate (d:\Test\node_modules\passport\lib\middleware\authenticate.js:342:7) at Object.module.exports.login (d:\Test\api\controllers\AuthController.js:37:7) at bound (C:\Users*\AppData\Roaming\npm\node_modules\sails\node_modules\lodash\dist\lodash.js:729:21) at routeTargetFnWrapper (C:\Users*\AppData\Roaming\npm\node_modules\sails\lib\router\bind.js:179:5) at callbacks (C:\Users*\AppData\Roaming\npm\node_modules\sails\node_modules\express\lib\router\index.js:164:37) at param (C:\Users*\AppData\Roaming\npm\node_modules\sails\node_modules\express\lib\router\index.js:138:11) at pass (C:\Users*\AppData\Roaming\npm\node_modules\sails\node_modules\express\lib\router\index.js:145:5) at nextRoute (C:\Users*\AppData\Roaming\npm\node_modules\sails\node_modules\express\lib\router\index.js:100:7) at callbacks (C:\Users*\AppData\Roaming\npm\node_modules\sails\node_modules\express\lib\router\index.js:167:11) at C:\Users*\AppData\Roaming\npm\node_modules\sails\lib\router\bind.js:187:7 at alwaysAllow (C:\Users*\AppData\Roaming\npm\node_modules\sails\lib\hooks\policies\index.js:207:11) at routeTargetFnWrapper (C:\Users*\AppData\Roaming\npm\node_modules\sails\lib\router\bind.js:179:5) [TypeError: Cannot read property 'message' of undefined]**

Below is my AuthController

var passport=require('passport');

  login:function(req,res){

    passport.authenticate('local', function(err, user, info) {

      if ((err) || (!user)) {

        return res.send({
          message:info.message,
          user: user
        });
      }
      req.logIn(user, function(err) {
        if (err) res.send(err);
        return res.send({
          message:"User Loged In",//info.message,
          user: user
        });
      });

    })(req, res);

  }
};

I am using the below model for testing

module.exports = {

  tableName: 'users',
  connection:'TestDB',
  autoCreatedAt:false,
  autoUpdatedAt:false,

  attributes: {
    username:{
        type:'string',
        required:true
      },
    password:{
      type:'string',
      required:true
    },
    toJSON: function() {
      var obj = this.toObject();
      delete obj.password;
      return obj;
    }
  }
};

The table which contains the username and password also has other fields like country. Is there any way I can authenticate it using passport.

Upvotes: 2

Views: 624

Answers (1)

Jorge Santiago
Jorge Santiago

Reputation: 17

did you do the sixth step of this link

module.exports.http = {
  middleware: {
    passportInit    : require('passport').initialize(),
    passportSession : require('passport').session(),

    order: [
      'startRequestTimer',
      'cookieParser',
      'session',
      'passportInit',
      'passportSession',
      'myRequestLogger',
      'bodyParser',
      'handleBodyParserError',
      'compress',
      'methodOverride',
      'poweredBy',
      'router',
      'www',
      'favicon',
      '404',
      '500'
    ],
  }
};

maybe you want to see sails-hook-sanpassport, is easy and fast

Upvotes: 0

Related Questions