【发布时间】:2019-04-27 11:11:03
【问题描述】:
我想向我的react-admin 门户网站添加一个注册页面。由于react-admin 没有提供注册页面,所以我创建了一个自定义页面并将其添加到自定义路由中:
customRoutes.js
import React from 'react';
import { Route } from 'react-router-dom';
import SignupForm from './signupForm';
export default [
<Route path="/signup" component={SignupForm} noLayout/>,
];
问题是我只能在用户已经登录时打开/signup 的页面。否则我会自动重定向到/login 路由。
如何禁用自定义路由的身份验证?是否有<Route> 接受的某些属性或与dataProvider.js 有关的属性?
编辑:
为我的signupForm.js添加代表代码:
import React from 'react';
import TextField from '@material-ui/core/TextField';
import Button from '@material-ui/core/Button';
import Dialog from '@material-ui/core/Dialog';
import { fetchUtils } from 'react-admin';
import { ApiUrl } from './config';
class SignupForm extends React.Component {
constructor() {
super();
this.state = {
fields: {
username: '',
password: ''
}
}
handleChange = name => event => {
let fields = this.state.fields;
fields[name] = event.target.value;
this.setState({
fields: fields,
});
};
handleSubmit = (event) => {
// Prevent default
event.preventDefault();
if (this.handleValidation()) {
let body = JSON.parse(JSON.stringify(this.state.fields));
let url = ApiUrl + '/api/user/create';
let options = {}
options.headers = new Headers({ Accept: 'application/json' });
options.method = 'POST'
options.body = JSON.stringify(body);
fetchUtils.fetchJson(url, options)
.then(data => {
alert(data.json.message);
this.props.history.push('/login')
})
.catch((err, ...rest) => {
console.log(err.status, err.message);
alert(err.message);
});
}
}
render() {
const { classes } = this.props;
const actions = [
<Button
type="submit"
label="Submit"
color='primary'
variant="flat"
>Submit</Button>,
];
return (
<Dialog
open={true}
style={{
textAlign: "center",
}}
onClose={this.handleClose}
classes={{ paper: classes.dialogPaper }}
>
<DialogTitle>Create an Account</DialogTitle>
<form className={classes.container} noValidate autoComplete="off" onSubmit={this.handleSubmit}>
<TextField
required
id="username"
label="Username"
value={this.state.fields["username"]}
onChange={this.handleChange('username')}
/>
<br />
<TextField
required
id="password"
label="Password"
value={this.state.fields["password"]}
onChange={this.handleChange('password')}
type="password"
/>
<div style={{ textAlign: 'right', padding: 40 }}>
{actions}
</div>
</form>
</Dialog>
);
}
}
export default withStyles(styles)(SignupForm);
【问题讨论】:
-
您的 SignupForm 代码是什么样的?
-
@Kosch 为我的
signup.js添加了缩短的代表代码 -
我是 react-admin 的新手,所以我不知道答案。但我想知道你是否可以使用授权钩子。因此,任何未经授权的人都可以获得“访客”权限,也许您可以使用它来显示/隐藏应用程序的某些部分。 marmelab.com/react-admin/Authorization.html
-
@geoaxis 是的,它在类似的线路上工作,我已经在我的回答中详细描述了。
标签: react-router-dom react-admin