【发布时间】:2018-03-15 07:39:12
【问题描述】:
我正在使用 react 和 express,但我没有进行服务器端渲染,但我使用一些路由(例如 /login /register)从 react 接收数据。我正在使用 react 路由器导航 HashRouter 我的问题是我是混淆在哪里检查天气用户是否经过身份验证我应该在反应或服务器上进行吗?即检查会话是否存在..我正在使用 cookie-session 来存储一些信息。如果不可能,那么这就是 jwt 令牌和护照 js 的用武之地吗?
这是我的服务器路由 我想重定向到一些反应路线,但我不能这样做,因为服务器和反应路线的工作方式不同。
server.post('/login', (req, res) => {
db.collection('users').findOne({
email: req.body.email
}, (err, succ) => {
if(err) throw err;
if(succ && succ.email == req.body.email && succ.password == req.body.password){
req.session.id = succ._id;
res.end()
} else {
res.json({
message: 'Invalid email or password!'
})
}
})
})
登录.js
onAuth = (e) => {
e.preventDefault();
const email = e.target.email.value;
const password = e.target.password.value;
fetch('/login', {
method: 'POST',
credentials: 'same-origin',
body: JSON.stringify({email: email , password: password}),
headers: {"Content-Type": "application/json"}
}).then(res => res.json())
.then(res => {
this.setState({
validate: {
message: res.message
}
})
return res;
}).catch(err => console.log(err));
}
这是我的 App.js,我现在正在检查 cookie,如果它存在的话,它可以工作,但页面需要刷新才能生效..
class App extends React.Component{
state = {
cookie: Cookies.get('session') || false
}
render(){
const {cookie} = this.state;
return (
<div>
<Header/>
<Switch>
<Route path="/register" component={Register}/>
<Route path="/login" component={Login}/>
<ProtectedRoute cookie={cookie} path="/home" component={Home}/>
</Switch>
</div>
);
}
}
const ProtectedRoute = ({component: Component, cookie, ...rest}) => {
return (
<Route
{...rest}
render={(props) => cookie
? <Component {...props} />
: <Redirect to={{pathname: '/login', state: {from: props.location}}} />} />
)
}
我正在使用 HashRouter 我的反应路线将以 /#/:path 为前缀
【问题讨论】:
-
您的问题不清楚,如果您尝试过任何代码,请发布?
-
代码不是我的问题,概念是我的问题。
-
你应该在服务器端检查它,客户端不在你的控制范围内
-
@AlbertoMéndez 我知道,但我不依赖服务器路由,所以我无法验证用户在
/home路由上是否经过身份验证,因为这是反应路由器 -
@PrabaharanRajendran 我更新了我的问题