无法从everyauth获得自定义用户

我没有阅读有关通过everyauth访问当前用户的手册。 也就是说,我可以从我的服务器上的req.user ,我的视图上的everyauth.user用户读取当前的用户信息,但是它们是未定义的。 但是,如果我尝试访问,例如,everyauth.twitter或everyauth.facebook,我从这个社交networking获取用户信息。

我想,当从数据库获得用户(查找或创build社会数据)它必须保存在会话variables,如currentUser ,我可以得到它在助手和其他数据库请求。

我的app.js代码:

var express = require('express') , everyauth = require('everyauth') , Promise = everyauth.Promise , util = require('util') , mongoose = require('mongoose') , routes = require('./routes') , _ = require('underscore') mongoose.connect('mongodb://127.0.0.1/base'); var Schema = mongoose.Schema , ObjectId = Schema.ObjectId; // Everyauth settings above that app.configure everyauth.twitter .consumerKey('secretKey') .consumerSecret('secret') .findOrCreateUser(function (session, accessToken, accessTokenSecret, twitterUserData){ var promise = this.Promise(); User.findOrCreateByUidAndNetwork(twitterUserData.id, 'twitter', twitterUserData, promise); return promise; }) .redirectPath('/') everyauth.facebook .appId("secretId") .appSecret("secret") .findOrCreateUser( function (session, accessToken, accessTokenExtra, fbUserMetadata) { var promise = this.Promise(); User.findOrCreateByUidAndNetwork(fbUserMetadata.id, 'facebook', fbUserMetadata, 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.cookieParser()); app.use(express.session({secret:'blablabla'})); app.use(everyauth.middleware()); // Yes, i'm use it app.use(express.methodOverride()); app.use(app.router); // And it app.use(express['static'](__dirname + '/public')); }); everyauth.helpExpress(app); // And this above that routes app.dynamicHelpers({ currentUser: function (req, res){ return req.user; //it's empty! } }) app.configure('development', function(){ app.use(express.errorHandler({ dumpExceptions: true, showStack: true })); }); app.configure('production', function(){ app.use(express.errorHandler()); }); // Routes app.get('/', routes.index); require("./controllers/user"); app.listen(80); 

和用户scheme:

 var Schema = mongoose.Schema , ObjectId = Schema.ObjectId; var UserSchema = new Schema({ "uid":{type:String}, "name":{type:String}, "network":{type:String}, "profile":{} }); mongoose.model('User', UserSchema); var User = mongoose.model('User'); 

用户查找或创buildfunction:

 this.findOrCreateByUidAndNetwork = function(uid, network, profile, promise) { User.find({uid: uid, network: network}, function(err, users) { if(err) throw err; if(users.length > 0) { promise.fulfill(users[0]);// <-- what i want:) } else { var user = new User(); user.network = network; user.uid = uid; user.profile = profile; user.name = profile.first_name || profile.name; user.save(function(err) { if (err) throw err; promise.fulfill(user); }); } }); }; 

谢谢,看我的问题。 最好的问候,Asci

可能有点晚,但对于任何需要这个答案的人 –

在Everyauth的Github页面上,它指定“访问用户,configurationeveryauth.everymodule.findUserById”。 所以例如(再次引用bnoguchi) –

 everyauth.everymodule .findUserById( function (id, callback) { yourApi.fetchUserById(id, function (err, user) { if (err) return callback(err); callback(null, user); }); // or more succinctly, if your api sends a user to the callback with function signature function (err, user): // yourApi.fetchUserById(id, callback); });