gpt4 book ai didi

javascript - 无法从 everyauth 获取自定义用户

转载 作者:可可西里 更新时间:2023-11-01 10:06:53 25 4
gpt4 key购买 nike

我确实阅读了有关通过 everyauth 访问当前用户的手册。据说,我可以从我的服务器上的 req.user 读取当前用户信息,在我的 View 上读取 everyauth.useruser,但是他们是未定义的。但是,如果我尝试从 everyauth.twitter 或 everyauth.facebook 获取访问权限,我将从该社交网络获取用户信息。

我想,当从数据库中获取用户(通过社交数据查找或创建)时,它必须保存在 session 变量中,例如 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);

和用户方案:

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

然后用户查找或创建函数:

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

感谢您观看我的问题。最好的问候,阿西

最佳答案

可能有点晚了,但对于任何需要答案的人来说——

在 everyauth 的 Github 页面上,它指定“要访问用户,请配置 everyauth.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);
});

关于javascript - 无法从 everyauth 获取自定义用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9075659/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com