【问题标题】:everyauth findByUserId erroreveryauth findByUserId 错误
【发布时间】:2012-11-26 17:23:49
【问题描述】:

我有 express 2.* 的工作示例,但现在我正在迁移到版本 3.*。问题是使用 facebook 进行身份验证,这会导致一些问题。一切正常,直到everyauth 向facebook 发出GET 请求,然后返回错误:

500 Error: WARNING: You are trying to access the attribute/method configured by `findUserById`, which you did not configure. Time to configure it.

这里是 app.js 代码

/**
 * Module dependencies.
 */

var express = require('express')
  , routes = require('./routes')
  , config = require('./conf/config.js')
  , user = require('./routes/user')
  , file = require('./routes/file')
  , http = require('http')
  , path = require('path')
  , everyauth = require('everyauth');

var UserService = require(__dirname + '/db/mongodb/UserService').UserService;

everyauth.facebook
  .appId(config.fb.appId)
  .scope('email')
  .fields('id,name,email')
  .appSecret(config.fb.appSecret)
  .findOrCreateUser(function(session, accessToken, accessToExtra, fbUserMetadata) {
    var promise = this.Promise();
    UserService.findOne({ email: fbUserMetadata.email }, function(err, user) {
      if (!user) {
        // Try to register user
        fbUserMetadata['accessToken'] = accessToken;
        UserService.save(fbUserMetadata);
        user = fbUserMetadata;
      }
      return promise.fulfill(user);
    });
    console.log(fbUserMetadata);
    return promise;
  })
  .findUserById(function(userId, cb) {
    console.log('findByUserId called');
    UserService.findOne({ id: userId }, function(err, user) {
      return cb(err, user);
    });
  })
  .redirectPath('/');

var app = express();

app.configure(function(){
  app.set('port', process.env.PORT || 3000);
  app.set('views', __dirname + '/views');
  app.set('view engine', 'jade');
  app.use(express.favicon());
  app.use(express.logger('dev'));
  app.use(express.compress());
  app.use(express.json());
  app.use(express.urlencoded());
  app.use(express.methodOverride());
  app.use(express.cookieParser('your secret here'));
  app.use(express.session());
  app.use(everyauth.middleware(app));
  app.use(app.router);
  app.use(require('less-middleware')({ src: __dirname + '/public' }));
  app.use(express.static(path.join(__dirname, 'public')));
});

everyauth.debug = true;
//everyauth.helpExpress(app);

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

//console.log(everyauth.facebook);

app.get('/', routes.index);
app.get('/users', user.list);

app.get('/file', file.index);
app.post('/upload', file.upload);

http.createServer(app).listen(app.get('port'), function(){
  console.log("Express server listening on port " + app.get('port'));
});

要解决此问题,请添加以下行:

everyauth.everymodule.findUserById(function(userId, cb) {
    console.log('findByUserId called');
    UserService.findOne({ id: userId }, function(err, user) {
      return cb(err, user);
    });
  });

【问题讨论】:

  • 我以为你必须在 everyauth.everymodule 上致电 findUserById,而不是在 everyauth.facebook 上。
  • 确实必须在everyauth.everymodule上调用
  • 太棒了。现在作为答案发布。

标签: javascript express everyauth


【解决方案1】:

everyauth.everymodule而不是everyauth.facebook上拨打findUserById

everyauth.everymodule.findUserById(function(userId, cb) {
    console.log('findByUserId called');
    UserService.findOne({ id: userId }, function(err, user) {
        return cb(err, user);
    });
});

【讨论】:

    猜你喜欢
    • 2012-05-10
    • 2023-03-25
    • 2012-11-22
    • 2014-07-31
    • 1970-01-01
    • 2022-01-15
    • 2012-08-12
    • 2013-01-20
    • 2011-08-11
    相关资源
    最近更新 更多