在服务器呈现期间存储/持久会话

时间:2016-07-04 08:22:24

标签: javascript reactjs redux react-router server-rendering

我遇到了一个问题,使用以下启动器回购作为反应:react-webpack-node

我正在使用sessionStorage进行身份验证,并意识到由于此启动器的服务器呈现性质,当应用程序在服务器上呈现时,我无法访问此会话数据,即保护我的路由,I' 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>
  )
}

但事实并非如此,我认为这是由于会话在服务器上未定义。

1 个答案:

答案 0 :(得分:1)

您已经指出了问题所在。您可以尝试使用cookie来存储令牌,因为cookie可以在客户端和服务器上访问。