2
我有一個使用react-router的通用NodeJS,Express,React/Redux應用程序。它在應用程序的初始請求和客戶端上對來自react-router的後續請求從服務器端渲染。在服務器端使用passport-jwt呈現Express/React應用程序
我routes.js文件:
<Route path="/" component={App}>
<Route path="/main" component={Main}/>
<Route path="/login" component={Login}/>
</Route>
我有匹配該反應的路由和發送組件標記回模板通配符快遞路線:
import routes from '../routes';
app.get('*', (req, res) => {
match(
{ routes, location: req.url },
(err, redirectLocation, renderProps) => {
let markup;
if (renderProps) {
markup = renderToString(
<Provider store={store}>
<RouterContext {...renderProps}/>
</Provider>
);
} else {
markup = renderToString(<NotFoundPage/>);
res.status(404);
}
return res.render('index', { markup });
}
);
});
現在我想使用passport-jwt保護一些被通配符路由攔截的路由,例如:
app.get("*", passport.authenticate('jwt', { session: false }),
(req, res) => {
match(
{ routes, location: req.url },
(err, redirectLocation, renderProps) => {
res.json("Success! You can not see this without a token");
}
)
});
如何在通配符路由上只保護routes.js中的給定路由?
其實我要讓我的通配符的路線,而服務器端呈現選擇性保護。你知道我怎麼能在這個案例中使用中間件? –
讓我們假設(只是一個例子),你想用你的令牌認證中間件保護'/ admin'背後的任何東西。爲此,在聲明通配符處理函數之前,您應該使用'app.use('admin',passport.authenticate('jwt',{session:false})'。中間件函數按順序執行,因此中間件包含的順序是重要的。 –
這裏是一個更深入的例子 - https://github.com/scotch-io/easy-node-authentication/blob/local/server.js –