2016-07-04 7 views
0

stieß ich auf ein Problem folgenden Starter Repo mit für reagieren: react-webpack-nodeStore/Sitzung während Server anhalten Rendering

I sessionStorage für Authentifizierungszwecke bin Ussing und erkannte, dass aufgrund von Server-Rendering Natur dieses Starter ich den Zugriff auf nicht in der Lage bin In dieser Sitzung Daten, während App auf dem Server dh rendert meine Routen zu schützen, ich folgende erwarten würde zu arbeiten:

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> 
) 
} 

Aber es ist nicht, und ich glaube, dies zu Sitzung beruht auf dem Server ist nicht definiert.

Antwort

1

Sie haben bereits auf das Problem hingewiesen. Sie können versuchen, Cookies zum Speichern des Tokens zu verwenden, da Cookies sowohl auf dem Client als auch auf dem Server verfügbar sind.