我正在尝试使用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中创建这些函数,或者我的用户模型有问题?让我知道是否缺少任何代码。
答案 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(...)