【发布时间】:2014-10-19 19:55:17
【问题描述】:
我将sequelize.js 用于我的数据存储,并使用github 策略和passport.js。我的代码是:
app.use(passport.initialize());
app.use(passport.session());
passport.use(new GitHubStrategy({
clientID: '123',
clientSecret: '456',
callbackURL: "" + config.hostname + ":" + config.port + "/auth/github/callback"
}, function(accessToken, refreshToken, profile, done) {
var authProviderQuery, newUser;
console.log('accessToken');
console.log(accessToken);
authProviderQuery = {
authId: profile.id
};
newUser = {
name: profile.username,
email: profile.emails[0].value
};
return DB.AuthProvider.find(authProviderQuery).complete(function(err, dbAuthProvider) {
var prop, _results;
if (err) {
return done(err);
}
if (!dbAuthProvider) {
return DB.User.create(newUser).complete(function(err, dbUser) {
var newAuthProvider;
if (err) {
return done(err);
}
newAuthProvider = {
name: 'github',
oathToken: accessToken,
authId: profile.id,
rawJSON: profile._raw
};
return dbUser.createAuthProvider(newAuthProvider).complete(function(err) {
if (err) {
return done(err);
}
return done(null, dbUser);
});
});
} else {
console.log(dbAuthProvider);
_results = [];
for (prop in dbAuthProvider) {
_results.push(console.log(prop));
}
return _results;
}
});
}));
passport.serializeUser = function(user, done) {
return done(null, user.id);
};
passport.deserializeUser = function(obj, done) {
return DB.User.find({
where: {
id: obj.id
}
}).complete(function(err, dbUser) {
console.log(dbUser);
return done(err, dbUser);
});
};
app.get('/auth/github', passport.authenticate('github'));
app.get("/auth/github/callback", passport.authenticate('github', {
failureRedirect: "/login"
}), function(req, res) {
return console.log('authenticated');
});
当我转到/auth/github 时,我收到以下错误:
/Users/mysite/node_modules/mysql/lib/protocol/Parser.js:82
throw err;
^
TypeError: object is not a function
我做错了什么?
【问题讨论】:
-
你没有更详细的错误信息吗?因为就目前而言,它并没有说太多。
-
我希望我做到了。就是这么说的。
-
在我看来,错误与 Passport 无关,而是与 Sequelize/node-mysql 有关。您是否还有其他代码在其中定义 Sequelize 等方法...?
-
它将
done视为deserializeUser函数中的一个对象。不完全确定为什么 -
哈这很有趣。想我已经明白了。只需为您的
deserializeUser函数删除您的return关键字。尤其是第一个,因为您返回的是 Promise 本身而不是调用回调!
标签: express passport.js sequelize.js