我正在我的应用程序中添加身份验证,它使用react路由器。我已经在react router中的auth-flow示例之后设计了客户机路由,但是使用了passport而不是该示例使用的本地存储。一切正常。
下一步是保护我在server.js中为express定义的路由。我可以发送一个重定向到/#/login,但这感觉很脆弱。在服务器端派生url到react router提供的登录路由的最佳方法是什么?
下面是我现在的server.js,它可以工作,但感觉很脆弱:

app.get('/protected',
    // redirecting to #/login seems bad: what if we change hashhistory, etc.
    passport.authenticate('local', { failureRedirect: '/#/login'}),
    function(req, res) {
     res.render('whatever');
    });

最佳答案

在express上配置route以获取所有路由,并使用react router进行路由,这样,ejem。
(我希望这能帮助你)
服务器.js

import express from 'express'
import path from 'path'

const app = express();

app.use(express.static(__dirname + '/public'));
app.get('*', (req,res) => res.sendFile(path.join(__dirname+'/public/index.html'))).listen(3000,() => console.log('Server on port 3000'))

routes.jsx公司
import React from 'react'
import ReactDOM from 'react-dom'
import { Router, Route, Link, browserHistory, IndexRedirect } from 'react-router'

import App from '../views/app.jsx'

const Routes = React.createClass({
    render(){
        return(
            <Router history={ browserHistory }>
                <Route path="/" component={App}>
                    <IndexRedirect to="/dashboard"/>
                    <Route path="dashboard" name="Dashboard" component={App} />
                    <Route path="pages" name="Pages" component={Pages} />
                    <Route path="/:Id" component={Page}/>
                    <Route path="/:Id/inbox" name=':ids' component={Inbox}/>
                </Route>
                <Route path="*" component={App}>
                    <IndexRedirect to="/dashboard" />
                </Route>
            </Router>
        );
    }
});
ReactDOM.render(<Routes />, document.getElementById('app'))

08-25 16:01
查看更多