我的用户模型未解决方法findOrCreate()

时间:2018-10-19 12:10:08

标签: node.js sequelize.js passport.js

我正在尝试使用Passport在Node.js中实现社交身份验证,因此在配置Facebook身份验证策略时需要使用findOrCreate()。 这是我的执行配置的facebook.js:

var passport = require('passport');
var FacebookStrategy = require('passport-facebook');

var User = require('../models/user');
var config = require('../_config');
var init = require('./init');

passport.use(new FacebookStrategy({
    clientID: 1900216703426978,
    clientSecret: 'f2c2ee6069de323109cb9347fad01026',
    callbackURL: "http://localhost:3000/passport/facebook/callback"
},

User.findOrCreate({ facebookId: profile.id }, function (err, user) {
    return cb(err, user);
})

));

init();

module.exports = passport;

这是我的模型/user.js

'use strict';

module.exports = (sequelize, DataTypes) => {
  const user = sequelize.define('user', {
    firstName: DataTypes.STRING,
    lastName: DataTypes.STRING,
    email: DataTypes.STRING,
    password: DataTypes.STRING,
  }, {});
  user.associate = function(models) {
    // associations can be defined here
  };
  return user;

}

根据http://docs.sequelizejs.com/manual/tutorial/models-usage.html的文档, 我认为findOrCreate()是可用于模型的内置方法。 但是在我的facebook.js中,findOrCreate()下有一个下划线,其中提到该方法尚未解决。

我已确保需要正确的目录,并且还尝试通过此链接进行解决:What is function User.findOrCreate doing and when is it called in passport?,该链接也需要一种未解决的方法findOne()。

我是否在我的模型/user.js中创建这些函数,或者我的用户模型有问题?让我知道是否缺少任何代码。

1 个答案:

答案 0 :(得分:1)

您必须连接sequal才能读取模型,例如:

// ./database.js

const Sequelize = require('sequelize')
const sequelize = new Sequelize(yourDatabaseOpts)
const User = require('./models/user')(sequelize, Sequelize)
module.exports = { User }

然后,当您要使用用户时,例如以下:

const User = require('./database').User
User.findOrCreate(...)