我正在使用 Compoundjs、compound-passport 和 passport-facebook 开发一个简单的用户 crud 模块。它使用默认方法生成一个 crud,如果我想将它保存到数据库中,它可以正常工作,但我想将它保存到这里的会话并在稍后阶段保存用户唯一的问题是我没有收到请求或模型中的会话。
这是我的 user.js 模型
module.exports = function (compound, User) {
// define User here
User.findOrCreate = function (data, done) {
console.log(data.profile.emails[0].value);
/* FACEBOOK OPENID */
if (data.profile.provider == "facebook") {
User.all({
where: {
email_id: data.profile.emails[0].value
}, limit: 1
}, function (err, user) {
if(data.profile.gender != '' && data.profile.gender != undefined)
var givenGender = (data.profile.gender == 'male')?'M':'F'
else
var givenGender = '';
if (user[0]) return done(err, user[0]);
var userDet = {
firstname: data.profile.name.givenName,
lastname: data.profile.name.familyName,
email_id: data.profile.emails[0].value,
gender:givenGender,
dob: new Date(data.profile._json.birthday),
registered_from:"facebook",
created_at:new Date(),
updated_at:new Date()
};
req.session.userdet = userDet;//This does not work
done();
//req.session.userdet = userDet;
// User.create({
// displayName: data.profile.displayName,
// email: data.profile.emails[0].value,
// facebookID: data.openId,
// provider:"facebook",
// createDate:new Date(),
// lastLogin:new Date()
// }, done);
});
} else
/* SOMETHING NOT KNOWN YET */
{
console.log("DONT NOW HOW TO HANDLE THIS USER.")
console.log(data.profile);
}
};
};
req.session.userdet = userDet; 上面不起作用,因为我在模型中没有请求对象。
这是我实现 facebook 策略的 facebook.js
var passport = require('passport');
exports.callback = function(token, tokenSecret, profile, done) {
exports.User.findOrCreate({
facebookId: profile.id,
profile: profile
}, function (err, user) {
return done(err, user);
});
};
exports.init = function (conf, app) {
var Strategy = require('passport-facebook').Strategy;
passport.use(new Strategy({
clientID: conf.facebook.apiKey,
clientSecret: conf.facebook.secret,
callbackURL: conf.baseURL + 'users/signupnew'
}, exports.callback));
passport.serializeUser(function(user, done) {
console.log("I am here");
console.log(user);
done(null, user);
});
passport.deserializeUser(function(id, done) {
exports.User.findById(id, function(err, user) {
done(err, user);
});
});
// app.get('/auth/facebook',
// passport.authenticate('facebook', { scope: [ 'email,user_likes,user_birthday' ] }));
// app.get('/auth/facebook/callback',
// passport.authenticate('facebook', {
// failureRedirect: conf.failureRedirect || '/'
// }), exports.redirectOnSuccess);
app.get('/users/signupnew',passport.authenticate('facebook', {
failureRedirect: conf.failureRedirect || '/'
}),function(req,res){
req.session.redirect = '/users/signup';
exports.redirectOnSuccess(req,res);
});
};
基本上我想实现一个多步骤注册,所以我收集了会话中的所有数据,然后注册一个用户。如果我对流程的理解有误,我深表歉意,因为我是节点和复合的新用户。