在服务器端渲染Express / React应用程序时使用passport-jwt

时间:2017-05-15 01:47:26

标签: javascript node.js reactjs react-router passport.js

我有一个使用react-router的通用NodeJS,Express,React / Redux应用程序。它是从服务器端在应用程序的初始请求和客户端上呈现来自react-router的后续请求。

我的routes.js文件:

<Route path="/" component={App}>
    <Route path="/main" component={Main}/>
    <Route path="/login" component={Login}/>
</Route>

我有一个匹配此react-routes的通配符快速路由,并将组件标记发送回模板:

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的给定路由?

1 个答案:

答案 0 :(得分:1)

您可以通过glDeleteBuffers(1, &VBO); 添加一些中间件来执行此操作。  (https://expressjs.com/en/4x/api.html#app.use

请务必在通配符处理程序

之前调用它
app.use