2015-10-01 19 views
0

我將navbar.ejs設置爲partial,以便我不需要再次重寫它。每條路線都需要navbar.ejs。使用護照驗證IM如何在每條路徑中存儲用戶的對象

<% if (!user) { %> 
     <li><a href="/signup">Signup</a></li> 
     <li><a href="/login">Login</a></li> 
    </ul> 
    <% } else{ %> 
     <li><a href="/dashboard">Dashboard</a></li> 
     <li><a><%= user.profile.name %></a></li> 
    <% } %> 

示例將

app.get('/', function(req, res) { 
    res.render('home'); 
} 

app.get('/dashboard', isLoggedIn, function(req, res) { 
    res.render('dashboard', { user: req.user }); 
} 

app.get('/about', function(req, res) { 
    res.render('about'); 
} 

對於有user's object作爲響應渲染,但其他人將繼續顯示

user is not defined 

我知道,當工作正常路線顯而易見的解決方案是在每條路線中傳遞user's object,但這真的很瘋狂。

試想一下,如果我必須這樣做

app.get('/1', function(req, res) { 
     res.render('/1', {user: req.user}); 
} 
app.get('/2', function(req, res) { 
     res.render('/2', {user: req.user}); 
    } 

app.get('/3', function(req, res) { 
     res.render('/3', {user: req.user}); 
    } 

app.get('/4', function(req, res) { 
     res.render('/4', {user: req.user}); 
    } 

app.get('/5', function(req, res) { 
     res.render('/5', {user: req.user}); 
    } 

如果需要驗證的路線,我不介意傳遞user's object,但簡單的路線如家,約或諮詢我不喜歡需要在傳遞。

+0

您使用的護照爲您的身份驗證機制,每一個路線? – sinusGob

+0

是的,我正在使用護照作爲我的身份驗證 –

+0

下次請說明您使用護照或自定義身份驗證的目的。 – sinusGob

回答

0

如果您不希望保留通過用戶的對象,在每一個路線,那麼你必須建立一箇中間件

某處後,您的護照配置中添加以下代碼

app.use(function(req, res, next){ 
    res.locals.user = req.user; 
}); 

那麼你不再需要通過用戶的對象

app.get('/1', function(req, res) { 
     res.render('/1'); 
} 
app.get('/2', function(req, res) { 
     res.render('/2'); 
    } 
+0

非常感謝您的幫助!這是工作! –

相關問題