【问题标题】:Couldn't get everyauth's req.user inside router functions无法在路由器功能中获取everyauth 的 req.user
【发布时间】:2012-02-03 02:27:43
【问题描述】:

我是 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 不填充用户数据。

【问题讨论】:

    标签: node.js everyauth


    【解决方案1】:

    要通过 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】:

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

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

      【讨论】:

        猜你喜欢
        • 2018-07-25
        • 1970-01-01
        • 1970-01-01
        • 2014-05-21
        • 2020-01-02
        • 1970-01-01
        • 2016-06-22
        • 2021-06-30
        • 1970-01-01
        相关资源
        最近更新 更多