在服务器渲染期间存储/持久化会话
Store / persist session during server rendering
我在使用以下入门回购进行反应时遇到了一个问题:react-webpack-node
我正在使用 sessionStorage 进行身份验证,并意识到由于此启动程序的服务器呈现性质,当应用程序在服务器上呈现时我无法访问此会话数据,即为了保护我的路线,我' d 期望以下工作:
import React from 'react'
import { Route, IndexRoute } from 'react-router'
import App from 'containers/App'
import LoginPage from 'containers/LoginPage'
import DashboardPage from 'containers/DashboardPage'
export default (store) => {
const requireAuth = (nextState, replace, callback) => {
const token = sessionStorage.getItem('token')
if (!token) {
replace({
pathname: '/login',
state: { nextPathname: nextState.location.pathname }
})
}
callback()
}
const redirectAuth = (nextState, replace, callback) => {
const token = sessionStorage.getItem('token')
if (token) {
replace({
pathname: '/'
})
}
callback()
}
return (
<Route path='/' component={App}>
<IndexRoute component={DashboardPage} />
<Route path='/login' component={LoginPage} onEnter={redirectAuth} />
<Route path='/dashboard' component={DashboardPage} onEnter={requireAuth} />
<Route path='/logout' component={LoginPage} />
</Route>
)
}
但事实并非如此,我认为这是由于服务器上的会话未定义。
你已经指出了问题。您可以尝试使用 cookie 来存储令牌,因为 cookie 在客户端和服务器上都可以访问。
我在使用以下入门回购进行反应时遇到了一个问题:react-webpack-node
我正在使用 sessionStorage 进行身份验证,并意识到由于此启动程序的服务器呈现性质,当应用程序在服务器上呈现时我无法访问此会话数据,即为了保护我的路线,我' d 期望以下工作:
import React from 'react'
import { Route, IndexRoute } from 'react-router'
import App from 'containers/App'
import LoginPage from 'containers/LoginPage'
import DashboardPage from 'containers/DashboardPage'
export default (store) => {
const requireAuth = (nextState, replace, callback) => {
const token = sessionStorage.getItem('token')
if (!token) {
replace({
pathname: '/login',
state: { nextPathname: nextState.location.pathname }
})
}
callback()
}
const redirectAuth = (nextState, replace, callback) => {
const token = sessionStorage.getItem('token')
if (token) {
replace({
pathname: '/'
})
}
callback()
}
return (
<Route path='/' component={App}>
<IndexRoute component={DashboardPage} />
<Route path='/login' component={LoginPage} onEnter={redirectAuth} />
<Route path='/dashboard' component={DashboardPage} onEnter={requireAuth} />
<Route path='/logout' component={LoginPage} />
</Route>
)
}
但事实并非如此,我认为这是由于服务器上的会话未定义。
你已经指出了问题。您可以尝试使用 cookie 来存储令牌,因为 cookie 在客户端和服务器上都可以访问。