我正在尝试通过节点后端传递所有http请求和React Routes以验证会话。
我也在使用webpack-dev-server,所以我假设在我的开发环境中,我将需要使用代理功能。
但是一旦请求到达节点服务器,我就不确定如何将结果传递回前端并继续正常的路由器页面。
类似于:1.单击React Router链接到/ contact
/节点中的联系路线验证会话
会话无效
如果有效,则继续正常页面加载
如果无效,请返回主页并更改状态。
我认为其中至少有一部分将通过生命周期方法来完成?
如果不使用React路由器以外的其他前端功能,是否有可能做到这一点。我想让此后端完全依赖于验证现有会话或生成一个新会话。
React在客户端处理所有路由,如果您想在Web应用程序外部访问/ contact,则必须具有以下内容:
app.get('*', (req, res) => {
res.render('index');
});
如果要处理预定义的路线,也可以执行以下操作:
// Path can be anything you want check in this case any route
app.use('/', (req, res, next) => {
const { token } = req.cookies;
if (!token) {
res.status(400).send({ data: 'error' });
} else {
// Verifying some token function
verifyIdToken(token)
.then((claims) => {
// Perform some operations or assignments
req.claims = claims;
// Countinue
next();
})
.catch((error) => {
res.status(400).send({ data: 'error', message: error });
});
}
});
但是,如果您想验证客户端中的会话,我建议您调用“ / authenticate”路由,然后根据您的响应更新状态,例如:
我有一个Home组件,它仅对登录用户可见,因此我创建了一个高阶组件来包装它,如下所示:
hoc-admin.js
// Generic validation method
const isEmpty = prop => (
prop === null ||
prop === undefined ||
(prop.hasOwnProperty('length') && prop.length === 0) ||
(prop.constructor === Object && Object.keys(prop).length === 0)
);
// This receives the props I want to check and the component to render
const userHOC = (props, Comp) => (WrappedComponent) => {
return class userHOC extends Component {
render() {
let valid = false;
props.map((prop) => {
valid = this.props && !isEmpty(this.props[prop])
// You can also check redux state props
// valid = this.props.common && !isEmpty(this.props.common[prop])
});
return valid
? (
<WrappedComponent {...this.props} /> // My wrapped component (Home)
)
: (
<Comp {...this.props} /> // My parameter component (Login)
)
}
};
};
export default userHOC;
然后,我只需要包装每个需要一些道具才能显示的组件,在这种情况下,我们会在我的home组件中寻找用户,因此:
import HocUser from '../hoc/hoc-user';
class Home extends Component {
...
}
export default HocUser(['user'], Login)(Home);
``
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句