मैं एक्सप्रेस 2.x और सत्र भंडारण के साथ pssportjs का उपयोग कर रहा हूं। लॉगिन के बाद मुझे केवल एक बार req.User मिल रहा है। जैसे ही मैं फिर से रीडायरेक्ट करता हूं req.User अपरिभाषित है।पासपोर्टजेएस: मेरे विचारों में req.user कैसे प्राप्त करें
यहाँ मेरी config है:
app.get('/auth/facebook', passport.authenticate('facebook', { scope: ['user_status', 'user_photos'] }));
app.get('/auth/facebook/callback', passport.authenticate('facebook', { successRedirect: '/index', failureRedirect: '/' }));
app.get('/index', function(req, res) {
res.render('index.ejs', {
siteTitle: "Welcome",
siteUrl: CONFIG.server.siteUrl,
user: req.user
});
});
और अंत में यह कैसे मैं मेरे विचार में उपयोगकर्ता वस्तु का उपयोग करने की कोशिश कर रहा हूँ है:
<div class="page-header">
<h3><%= siteTitle %></h3>
</div>
<% if (!user) { %>
<p>Not logged in !</p>
<% } else { %>
<p>Hello, <%= user.firstname %> <%= user.lastname %>.</p>
<% } %>
passport.serializeUser(function(user, done) {
done(null, user._id);
});
passport.deserializeUser(function(userId, done) {
User.findOne({_id: userId} ,function(err, user){
done(err, user);
});
});
// Authentication Strategy
passport.use(new FacebookStrategy({
clientID: CONFIG.fb.appId,
clientSecret: CONFIG.fb.appSecret,
callbackURL: CONFIG.fb.callbackURL
},
function(accessToken, refreshToken, profile, done) {
// asynchronous verification, for effect...
process.nextTick(function() {
User.findOne({ 'accounts.uid': profile.id, 'accounts.provider': 'facebook' }, function(err, olduser) {
if(olduser) {
done(null, olduser);
} else {
var newuser = new User();
var account = {provider: "facebook", uid: profile.id};
newuser.accounts.push(account);
newuser.firstname = profile.name.givenName;
newuser.lastname = profile.name.familyName;
newuser.email = "TBD...";
newuser.save(function(err) {
if(err) { throw err; }
done(null, newuser);
});
}
});
});
}
));
var app = module.exports = express.createServer();
// configure express
app.configure(function(){
app.set('views', __dirname + '/views');
app.set('view engine', 'ejs');
app.use(express.compiler({ src : __dirname + '/public', enable: ['less']}));
app.use(express.cookieParser());
app.use(express.bodyParser());
app.use(express.methodOverride());
//app.use(express.session({ secret: "keyboard cat" }));
app.use(express.session({
secret: "victory cat",
store: new MongoStore({
url: CONFIG.dbMongo.url
})
}));
app.use(passport.initialize());
app.use(passport.session());
app.use(app.router);
app.use(express.static(__dirname + '/public'));
});
ये मेरी रास्ते हैं
फेसबुक के साथ प्रमाणीकरण के बाद मेरा विचार सही नाम और अंतिम नाम प्रदर्शित करता है। एक और पृष्ठ अनुरोध के बाद req.User undefiend है (deserializing invoced नहीं जा रहा है)।
मैं क्या गलत कर रहा हूं?
अच्छा सवाल है। इससे बहुत मदद मिली :) –
यह मूर्खतापूर्ण है कि इससे "आधिकारिक" दस्तावेज से अधिक मदद मिली है, डेवलपर्स को वास्तव में अपने काम को समझाने में अधिक समय लेना चाहिए। –