Не удалось получить rea.user для каждого пользователя внутри функций маршрутизатора - PullRequest
1 голос
/ 01 февраля 2012

Я новичок в node.js и в каждом. В то время как я просто играю вокруг каждого, я понял, что everyauth.user работает в нефритовых представлениях, но я не мог заставить req.user работать внутри обратных вызовов страницы.

/**
 * 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);

Вот проблемная часть

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

Кажется, мне не хватает какой-то точки. Странная часть: req.loggedIn работает, как и ожидалось, но почему-то каждый пользователь не заполняет пользовательские данные.

Ответы [ 2 ]

3 голосов
/ 02 февраля 2012

Чтобы получить доступ к 'user' через req.user, вам нужно настроить everyauth.everymodule.findUserById, как показано ниже

//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
2 голосов
/ 01 февраля 2012

У меня были проблемы с everyauth req.user с последними версиями. То, что я делаю, я использую "req.session ...". Поэтому, если я хочу, чтобы пользователь находился под oauth на Facebook, я бы использовал req.session.auth.facebook.user.id, и это дает мне идентификатор пользователя.

console.log (req.session) и извлеките всю информацию, которую вы хотите использовать.

...