У меня есть экран входа, где я реализовал аутентификацию через API GraphQL. Аутентификация работает нормально, и я получаю токен, но не могу понять, как продолжить. После нажатия кнопки «Вход» я хочу перенаправить на страницу / панель. Если аутентификация не работает, пользователь не должен обращаться к /panel.
/ панель работает нормально, когда я использую React Router. Но я хочу получить к нему доступ сразу после нажатия кнопки входа. Как я могу это исправить?
export default class LoginPage extends Component <{}, { email: string,password: string }>{
constructor(props: Readonly<{}>) {
super(props);
this.state = {
email: '',
password: '',
};
}
_SignIn = (e: { preventDefault: () => void; }) => {
axios({
url: 'https://xzy/graphql',
method: 'post',
headers: {
'Content-Type': 'application/json',
},
data: {
query: `
mutation{
loginMethod(email: "${this.state.email}",
password: "${this.state.password}")
}`,
},
})
.then((result: { data: any }) => {
const token = JSON.stringify(result.data.data.loginEmail).slice(1,-1);
if (token){
alert(token)
//return <Redirect to='/users' />
}
})
.catch((err: any) => {
console.log(err);
});
e.preventDefault();
};
render() {
return (
<Container component="main" maxWidth="xs">
<CssBaseline />
<div style={{
display: 'flex',
flexDirection: 'column',
alignItems: 'center'}}>
<Avatar>
<LockOutlinedIcon />
</Avatar>
<Typography component="h1" variant="h5">
Sign in
</Typography>
<form style={{width: '100%'}} noValidate>
<TextField
variant="outlined"
margin="normal"
required
fullWidth
id="email"
label="Email Address"
name="email"
autoComplete="email"
autoFocus
onChange={e => {
this.setState({email: e.target.value})
}}
/>
<TextField
variant="outlined"
margin="normal"
required
fullWidth
name="password"
label="Password"
type="password"
id="password"
autoComplete="current-password"
onChange={e => {
this.setState({password: e.target.value})
}}
/>
<FormControlLabel
control={<Checkbox value="remember" color="primary" />}
label="Remember me"
/>
<Button
onClick={this._SignIn}
>
Submit</Button>
<Grid container>
<Grid item xs>
<Link href="#" variant="body2">
Forgot password?
</Link>
</Grid>
</Grid>
</form>
</div>
<Box mt={8}>
<Copyright />
</Box>
</Container>
);
}
}