trailsjs / sails-auth

Passport-based User Authentication system for sails.js applications. Designed to work well with the sails-permissions module.
https://www.npmjs.org/package/sails-auth
MIT License
265 stars 141 forks source link

Login when registerig #163

Closed rsibanez89 closed 7 years ago

rsibanez89 commented 7 years ago

I'm trying to authenticate the user when registering. But the req.user is empty in the next request. This is my UserController

var _ = require('lodash');
var _super = require('sails-auth/api/controllers/UserController');

_.merge(exports, _super);
_.merge(exports, {

  // Extend with custom logic here by adding additional fields, methods, etc.

  create: function (req, res, next) {
    console.log("UserController.create was called");

    // the register method is defined in sails-auth/services/protocols/local.js
    sails.services.passport.protocols.local.register(req.body, function (err, user) {
      if (err)
        return res.negotiate(err);

      console.log(user);

      // Option 1
      req.session.authenticated = true;
      req.user = user; // This is not persistent
      return res.ok(user);

      // Option 2
     sails.services.passport.protocols.local.login(req, email, password, function(err, user) {
        if (err)
          return res.negotiate(err);
        return res.ok(user);
      });

      // Option 3
      sails.services.passport.callback(req, res, function (err, user) {
        if (err || !user) {
          sails.log.warn(user, err);
          return res.negotiate(err);
        }
        console.log(user);
        req.login(user, function (err) {
          if (err) {
            sails.log.warn(err);
            return res.negotiate(err);
          }

          req.session.authenticated = true;
          return res.ok(user);
      });  

    });

  },

});
rsibanez89 commented 7 years ago

This is working

var _ = require('lodash');
var _super = require('sails-auth/api/controllers/UserController');

_.merge(exports, _super);
_.merge(exports, {

  // Extend with custom logic here by adding additional fields, methods, etc.

  create: function (req, res, next) {
    console.log("UserController.create was called");

    // the register method is defined in sails-auth/services/protocols/local.js
    sails.services.passport.protocols.local.register(req.body, function (err, user) {
      if (err)
        return res.negotiate(err);

      sails.models.passport.findOne(user.id).exec(function (err, passport){
          if (err) {
            console.log(err);
          }

          req.session.authenticated = true;
          req.session.passport = passport;

          return res.ok(user);
        });
    });

  },

});