gpt4 book ai didi

node.js - 为 everyauth 配置 findByUserId - node、express、mongoose、everyauth

转载 作者:太空宇宙 更新时间:2023-11-03 22:39:25 26 4
gpt4 key购买 nike

我对 Node.js 和 Express 相当陌生。我正在尝试使用 Twitter 完成 everyauth 的配置,并尝试访问服务器端的“res.user”,根据 everyauth 的文档要求配置 .findByUserId 。这就是我遇到麻烦的地方。如何配置findByUserId?

这就是我得到的。目前正在创建一个新用户或将其登录,我还没有正确设置 .findByUserId ,但还没有让我访问服务器端所需的 req.user 。如果您对如何优化此代码有其他建议,请也告诉我,因为我刚刚学习。

代码编辑如下...

App.js

var express = require('express')
, everyauth = require('everyauth')
, util = require('util')
, Promise = everyauth.Promise
, users = require('./lib/users')
, config = require('./config.js')
, twitter = require('./lib/twitter')
, games = require('./lib/games')

everyauth.twitter
.consumerKey(config.twitter.consumerKey)
.consumerSecret(config.twitter.consumerSecret)
.findOrCreateUser( function (session, accessToken, accessTokenSecret, twitterUserMetadata) {
var promise = this.Promise();
users.findOrCreateUserbyTwitterData(twitterUserMetadata, accessToken, accessTokenSecret, promise)
return promise;
})
.redirectPath('/');
everyauth.everymodule.findUserById(function (userId, callback) {
users.findById(userId, callback);
});

var app = module.exports = express.createServer();
everyauth.helpExpress(app);
// Configuration

app.configure(function(){
app.set('views', __dirname + '/views');
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(express.cookieParser());
app.use(express.session({secret: "FxT10477A93d54HJx5"}));
app.use(everyauth.middleware());
app.set('view engine', 'jade');
app.use(express.static(__dirname + '/public'));
});

app.configure('development', function(){
app.use(express.errorHandler({ dumpExceptions: true, showStack: true }));
});

app.configure('production', function(){
app.use(express.errorHandler());
});

// Routes

app.get('/', function(req, res){
console.log(req.user);
res.render('index', { title: 'Zeitheist 2' });
});

用户.js

var twitter = require(__dirname + "/twitter");
var mongoose = require('mongoose');
var Schema = mongoose.Schema
, ObjectId = Schema.ObjectId;

var userSchema = new Schema({
user : ObjectId
, id : Number
, twitterId : Number
, twitterName : String
, profileImageUrl : String
, name : String
, dateCreated : Date
, session : String
, accessToken : String
, accessTokenSecret : String
});

var conn = mongoose.createConnection('mongodb://localhost/zeitheist2_test');
var userModel = conn.model('User', userSchema);

this.findOrCreateUserbyTwitterData = function(twitterData, accessToken, accessTokenSecret, promise) {
userModel.find({'twitterId' : twitterData.id}, function(err, users) {
if(err) throw err;
if(users.length > 0) {
promise.fulfill(users[0]);
} else {
var user = new userModel();
user.twitterId = twitterData.id
user.twitterName = twitterData.screen_name
user.profileImageUrl = twitterData.profile_image_url
user.name = twitterData.name
user.accessToken = accessToken
user.accessTokenSecret = accessTokenSecret
user.save(function(err) {
if (err) throw err;
twitter.follow(accessToken, accessTokenSecret);
promise.fulfill(user);
});
}
});
}
this.findById = function(userId, callback) {
userModel.findOne({'_id' : userId}, function(err, user) {
if(err) throw err;
if(callback)
callback(user);
else
return user;
});
}

我需要如何查找 everyauth.everymodule.findUserById 才能访问 req.user?在我成功登录后登录 req.user 的默认路由中,它显示“未定义”

最佳答案

您的代码应如下所示:

everyauth.everymodule.findUserById(function (userId, callback) {
userModel.findById(userId, callback);
});

在您的代码中,您从应该调用回调的函数返回值。请记住, Node 中的大多数内容都是异步的,并使用回调返回涉及 I/O 的任何内容(例如数据库查找)的结果。

关于node.js - 为 everyauth 配置 findByUserId - node、express、mongoose、everyauth,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10388098/

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