2015-12-21 37 views
1

我正在構建一個簡單的SPA,使用MEAN堆棧和Passportjs進行身份驗證,用戶可以在其中創建,查看和回答投票。頁面路由通過角度和$ routeProvider完成。 api要求創建/管理民意調查,註冊/登錄調用通過快速路由完成。這一切都正常,我可以創建一個用戶,我也可以登錄,但是現在我遇到了登錄或註冊失敗時由護照生成的Flash消息的問題。使用帶有角度路由的Flash消息

我在我的passport.js文件中將消息分配給req.flash,但我找不到如何將這些消息發送給客戶端以及如何接收和顯示它們。所有的例子和Q &我發現只使用express路由和模板作爲ejs。我對他們沒有任何反應,但我寧願不要在可能的情況下使用它們。

這裏的一些片段:

return語句在註冊功能時找到的電子郵件已經存在:通過快遞

return done(null, false, req.flash('signupMessage', 'That email is already taken.')); 

註冊路由DOEN。重定向工作正常,我可以看到用戶在DB:

app.post('/signup', passport.authenticate('local-signup', { 
    successRedirect : '/', 
    failureRedirect : '/signup', 
    failureFlash: true 
     })); 

如果我只用快遞路由和我使用EJS我可以實現這個片段 - 但我寧願不要。問題是:這是什麼替代?我如何將req.flash中設置的消息發送給客戶端,以及如何檢索它們?

app.get('/signup', function(req, res) { 
    // render the page and pass in any flash data if it exists 
    res.render('signup.ejs', { message: req.flash('signupMessage') }); 
}); 
+0

老類似的問題(我用完全相同的教程),但仍然沒有答案。 http://stackoverflow.com/questions/25464798/how-to-get-equivalent-of-req-something-from-in-angular-with-nodejs – NicolaF

回答

1

我找到了解決我的問題在這裏:How to combine passport and angular-ui routing

我只是需要改變,從這個快遞路由:

app.post('/signup', passport.authenticate('local-signup', { 
successRedirect : '/', 
failureRedirect : '/signup', 
failureFlash: true 
    })); 

這樣:

// Express Route with passport authentication and custom callback 
app.post('/api/login', function(req, res, next) { 
    passport.authenticate('local-login', function(err, user, info) { 
    if (err) { 
    return next(err); 
    } 
    if (user === false) { 
    res.status(401).send(req.flash('signupMessage')); 
    } else { 
    res.status(200).send("success!"); 
    } 
})(req, res, next); 
}); 

這我收到一些信息給客戶。