React Login,一旦授权成功,移动到新视图
React Login, Moving to new view once authorization is good
我在尝试做一些我认为相当简单的事情时遇到了障碍。
我的应用程序是这样布局的:
├── src
│ ├── background.jpeg
│ ├── client.js
│ ├── client.min.js
│ ├── images.jpeg
│ ├── index.html
│ ├── js
│ │ ├── client.js
│ │ └── components
│ │ ├── Footer.js
│ │ ├── Header.js
│ │ ├── Layout.js
│ │ ├── login
│ │ │ ├── Layout2.js
│ │ │ └── Login.js
│ │ └── Main.js
client.js以这种方式加载Layout2组件:
import React from "react";
import ReactDOM from "react-dom";
import { Router, Route, IndexRoute, hashHistory } from "react-router";
import Layout2 from "./components/login/Layout2";
import Login from "./components/login/Login";
const app = document.getElementById('app');
ReactDOM.render(
<Router history={hashHistory}>
<Route path="/" component={Layout2}>
<IndexRoute component={Login} />
</Route>
</Router>,
app);
和Layout2加载Login组件:
import React from "react";
import Center from 'react-center';
import Login from "./Login";
export default class Layout extends React.Component {
constructor() {
super();
}
render() {
return (
<div>
<Center>
<Login>
</Login>
</Center>
</div>
);
}
}
最后登录是
import React from "react";
import linkState from 'react-link-state';
import {Router} from "react-router";
import Layout from "../Layout.js";
var _ = require('lodash');
var $ = require ('jquery');
export default class Login extends React.Component {
constructor() {
super();
this.state = {
user: '',
password: '',
pin: ''
}
this._onEntry = this._onEntry.bind(this);
}
render() {
var styles = _.cloneDeep(this.constructor.styles);
return (
<div style={styles.loginPosition}>
<form role="form">
<div className="form-group">
<br /><br />
<input type="text" class="form-control" valueLink={linkState(this, 'user')} placeholder="Username" onKeyPress={this._onEntry}/> <br />
<input type="password" class="form-control" valueLink={linkState(this, 'password')} placeholder="Password" onKeyPress={this._onEntry}/> <br />
<input type="password" class="form-control" valueLink={linkState(this, 'pin')} placeholder="Pin" onKeyPress={this._onEntry}/>
</div>
</form>
<br /><br />
</div>
);
}
_onEntry(e){
var user = this.state.user;
var pass = this.state.password;
var pin = this.state.pin;
/* Look for the enter key */
if (e.nativeEvent.keyCode != 13)
return;
if( user === "" || pass === "" || pin === "" )
return;
/* Form the message for the backend */
var message = { user: user, pass: pass, pin: pin, time: new Date() };
var server = "http://blah/phpsomething.php";
$.ajax({
url: server,
dataType: 'json',
type: 'POST',
data: message,
success: function(data) {
if( data.status === true ){
alert("Access Granted");
} else if( data.status === false ){
alert("Access Denied");
}
}.bind(this)
});
}
}
我的问题是,一旦我验证了用户凭据,我得到警报("访问授予"),我如何改变到另一个布局?
我必须首先加载登录页面,所以我允许用户有机会进行身份验证,但之后我想加载Main.js组件。
我试过使用this.context.router.push();和窗口。地点等等……但我所做的一切似乎都不起作用,改变到Layout.js,其中有我想从那一点上使用的其他视图。
我肯定我错过了一些简单的东西。
您应该尝试通过browserHistory或hashHistory推送新位置。
在您的示例中,您使用的是hashHistory,因此:
import { hashHistory } from 'react-router'
if( data.status === true ){
alert("Access Granted");
hashHistory.push("URL to Main.js component")
} else if( data.status === false ){
alert("Access Denied");
}
添加Main.js组件到你的react路由器:
import Main from "./components/Main";
<Router history={hashHistory}>
<Route path="/" component={Layout2}>
<IndexRoute component={Login} />
<Route path="/URL to Main.js component" component={Main} />
</Route>
</Router>
我认为您需要保存一些标志描述成功授权(或令牌或其他东西),并使用onEnter
方法检查您想要保护的每个路由。你可以在这里阅读更多关于进入hook (react router)的信息
例如:用户尝试访问安全路由/secured
。React路由器理解并调用onEnter
钩子,在那里你可以验证用户的访问权限。如果验证失败,您可以将用户重定向到Login
路由,否则用户将获得请求的页面。
相关文章:
- Canvas Html5绘图应用程序,移动画布会导致重大问题
- 正在SharePoint 2013母版页中添加JQuery移动文件
- 如何在android中使用phonegap将文件从一个文件夹移动/复制到另一个文件夹
- 如何使用phaser使html5游戏在移动设备浏览器上运行
- FabricJs-限制主对象内添加对象的移动区域
- 尽管链接成功并已成功下载,但未找到NPM模块
- 如何从画布上的某个移动事件中获取X和Y
- 触摸移动时切换到新元素
- 每当您在选择器内移动鼠标时,悬停功能就会重复
- 停止jQuery UI滑块移动超过给定值
- 在websql成功调用中Jquery移动主题打开按钮
- 移动优先 - 加密缓存成功和失败处理程序
- 当移动到“外部”版本时,“内部”成功 AJAX 中的“数据”变量应该更改为什么
- googlemaps移动标记与来自ajax的lat/lng成功返回数据
- 使用POST从PhoneGap,移动jQuery应用程序跨域脚本检测成功的html表单提交
- 我如何使用 移动到另一个页面后使用 XMLHttpRequest 成功验证表单,因为标头函数不适用于 ajax
- 必应地图pin's拖拽成功,但必应地图移动事件继续
- Azure移动服务push.apns.send的成功回调
- 在现有页面上创建对话框,php-ajax查询成功,jquery移动
- React Login,一旦授权成功,移动到新视图