1

私はnode.jsとeveryauthの初心者です。everyauth.userすべての認証を試しているうちに、それがjadeビューで機能することに気付きましたが、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 に答える