【发布时间】:2017-06-06 13:14:52
【问题描述】:
我目前正在使用 React、Redux、Express 和 Node.js 向网站添加登录以及与登录相关的一组高级功能。对于实际登录,我使用的是 Passport,以及 Facebook、Google 和 Twitter 策略。获得所需令牌后,它会发送到 AWS Cognito 联合身份,以便为用户获取同步数据。网站上的数据也会在需要时同步回 Cognito。
用户登录后,我可以在 Node 服务器上构建一个完整的用户配置文件,但是现在呢?
// server.jsx
// imports
.............
// variables
.............
var userProfile;
// logging the user with Passport and adding it to the profile
.............
app.use((req, res) => {
// I can do whatever I want with the profile here
.............
// handling the request and creating an initial state ..
.............
}
在过去,使用会话变量 (Java/C#) 或 cookie (JS) 可以很容易地解决这个问题,但在同构应用程序中就不是那么简单了。假设用户在登录后通过路由访问 profile.jsx: cookie(例如通过 client-sessions 设置)仅在 jsx 文件在客户端上运行时可用;每当它被服务器渲染时,它都无法访问。
即使在使用同构cookie 或通用cookie 之类的东西时,似乎也需要自定义代码,这几乎违背了同构应用程序的目的。我也想过使用 Redux,但是 Redux 似乎在 Node 上只有一个初始状态,这并没有多大帮助。
// Profile.jsx
import React , { Component } from 'react';
import Cookies from 'universal-cookie';
class Profile extends Component {
// Stuff
.............
render() {
// Would love to be able to access to the profile without custom code like this
if (typeof window != 'undefined' && window.document) {
const cookies = new Cookies();
console.log(cookies.get('user'));
}
}
那么,是否有一种流畅的方式来处理您想要随时访问的用户配置文件或其他变量,而无需为每个场景编写大量自定义代码?似乎大多数教程和示例仅在服务器或客户端上处理此类事情,在这种特殊情况下需要重新编写网站。
在大多数情况下,同构应用程序是相当简单的,但是当引入身份验证、配置文件等时,复杂性确实突飞猛进,所以我非常感谢任何关于此事的反馈。
【问题讨论】:
-
有些框架支持同构应用,据我所知 express 不是其中之一
-
你可以看看meteor.js来编写这样的应用程序(它可以与react一起工作)
-
该网站已经在制作中,并且已经制作了一年。这是一个基于 express/node 的同构应用程序,所以我不确定我理解你的意思.. ?
-
抱歉不知道该网站正在制作中,反正我的意思是看看这个:
标签: javascript node.js reactjs authentication isomorphic-javascript