2013-06-02 47 views
1

嘗試使用express.js和passport.js設置身份驗證。 嗯,可能是愚蠢的問題,但我不明白所有這些東西是如何工作的。express.js,passports.js:爲什麼共享會話?

我設置了facebook策略,現在可以通過facebook授權用戶。我堅持的是:

如果我在一個客戶端(瀏覽器)上對用戶進行身份驗證,它會在所有發出請求的其他客戶端上進行身份驗證。這是爲什麼?我該如何配置快遞和護照才能在生產中正確安全地使用它?

我的快遞配置:

app.use(express.bodyParser()); 
app.use(express.methodOverride()); 

app.use(express.cookieParser()); 
app.use(express.session({ secret: 'secret' })); 

app.use(passport.initialize()); 
app.use(passport.session()); 
app.use(app.router); 
app.use(express.static('public')); 

沒有真正得到的所有驗證的東西。在通過身份驗證後,客戶端是否應該出現一些cookie?

UPD:

護照配置:

passport.serializeUser(function(user, done) { 
    done(null, user._id); 
}); 

passport.deserializeUser(function(id, done) { 
    User.findById(id, function(err, user) { 
     done(err, user); 
    }); 
}); 


passport.use(new FacebookStrategy({ 
     clientID: nconf.get('facebook:appId'), 
     clientSecret: nconf.get('facebook:appSecret'), 
     callbackURL: nconf.get('facebook:callbackUrl') 
    }, 
    function(accessToken, refreshToken, profile, done) { 
     User.findOrCreateExternal(profile, done) 
    } 
)); 

路線

app.get('/api/users/facebook', users.facebookLogin); 
app.get('/api/v1/users/facebook/callback', users.facebookLoginCallback); 

操作:

facebookLogin: function(req, res, next){    
     return passport.authenticate('facebook', { 
      scope: nconf.get('facebook:permissions') 
     })(req, res, next) 
    }, 

    facebookLoginCallback: function(req, res, next){ 
     return passport.authenticate('facebook', { 
      successRedirect: process.env.FB_SUCCESS_REDIRECT, 
      failureRedirect: process.env.FB_FAILURE_REDIRECT 

     })(req, res, next) 
    }, 

UPD2:

路線和行動得到當前認證的用戶:

app.get('/api/users/logged', users.getLoggedInUser) 

行動代碼:

getLoggedInUser: function(req,res){ 
    //Currently last authenticated user is send to all clients that make requests. 
    res.send({user: req.user || false}) 
} 
+0

您如何使用passport.js以及如何驗證路線? –

+0

有問題需要更新。 – WHITECOLOR

+0

好,如何確保用戶可以請求路由? –

回答

0

的問題是,我使用的中間開發的Web服務器(服務開發資產,livereload等),這是不正確地將http請求傳輸到api服務器。