Burak Bayer
Burak Bayer

Reputation: 95

Couldn't get everyauth's req.user inside router functions

I am a newbie of node.js and everyauth. While I just playing around everyauth I have realized that everyauth.user works in jade views but I couldnt get req.user work inside page callbacks.

/**
 * Module dependencies.
 */


var express = require('express')
  , routes = require('./routes')
  , everyauth = require('everyauth')
  , Promise = everyauth.Promise
  , util      = require('util')
  , models = require('./models');



//Everyauth setup

everyauth.twitter
  .consumerKey('XXX')
  .consumerSecret('XXX')
  .findOrCreateUser(function(session, accessToken, accessTokenSecret, twitterData){
    var promise = new Promise();
    models.findOrCreateTwitterUser(twitterData,promise);
    return promise;
  })
  .redirectPath('/');

var app = module.exports = express.createServer();
// Configuration

app.configure(function(){
  app.set('views', __dirname + '/views');
  app.set('view engine', 'jade');
  app.use(express.bodyParser());
  app.use(express.static(__dirname + '/public'));
  app.use(express.cookieParser());
  app.use(express.session({secret:"Iam james bond"}));
  app.use(express.methodOverride());
  //app.use(app.router);  
  app.use(everyauth.middleware());
});

app.configure('development', function(){
  everyauth.debug = true;
  app.use(express.errorHandler({ dumpExceptions: true, showStack: true })); 
});

app.configure('production', function(){
  app.use(express.errorHandler()); 
});

// Routes

app.get('/', function(req, res){
  if(req.loggedIn){
    console.log(req.user); //<--This is always undefined
  }
  console.log("index");
  res.render('index', { title: 'Welcome to Chat app' });
});

//Helpers
everyauth.helpExpress(app);

app.listen(3000);
console.log("Express server listening on port %d in %s mode", app.address().port, app.settings.env);

Here is the problematic part

app.get('/', function(req, res){
  if(req.loggedIn){
    console.log(req.user); //<--This is always undefined
  }
  console.log("index");
  res.render('index', { title: 'Welcome to Chat app' });
});

It seems I am missing some point. The weird part is req.loggedIn works as expected but somehow everyauth don't populate user data.

Upvotes: 1

Views: 1514

Answers (2)

slv007
slv007

Reputation: 328

To access the 'user' by req.user you need to configure everyauth.everymodule.findUserById like below

//Everyauth setup
....
....
everyauth.everymodule.findUserById( function (userId, callback) {
        var db = app.set('db');
        var User = db.main.model('User');
        User.findById(userId, callback);
        // callback has the signature, function (err, user) {...}
    });
....
....
var app = module.exports = express.createServer();
//Configuration

Upvotes: 3

guiomie
guiomie

Reputation: 5148

I've been having issues with everyauth req.user with the latest versions. What I do is I use "req.session...". So If I want to get the user while under the facebook oauth, I'd use req.session.auth.facebook.user.id, and this gives me the users Id.

console.log(req.session) and from there extract whatever information you want to use.

Upvotes: 2

Related Questions