1

我是 node.js 和everyauth 的新手。虽然我只是在玩everyauth,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按预期工作,但不知何故everyauth 不会填充用户数据。

4

2 回答 2

3

要通过 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
于 2012-02-02T18:27:43.280 回答
2

我一直在使用最新版本的 everyauth req.user 时遇到问题。我所做的是使用“req.session ...”。因此,如果我想在 facebook oauth 下获取用户,我会使用 req.session.auth.facebook.user.id,这给了我用户 ID。

console.log(req.session) 并从那里提取您想要使用的任何信息。

于 2012-02-01T04:11:33.213 回答