У меня проблемы с перенаправлением после входа в систему. Как я знаю, Fetch API не имеет концепции обработки этого. Я пытался использовать React-router-dom, но он не работает. Я не знаю, что я делаю по-другому. Я пытаюсь научиться основам реагировать, разработать приложение, которое полностью аутентифицировано.
Я сделал это
import { BrowserRouter as Router, Route, Redirect} from 'react-router-dom';
import Dashboard from './Dashboard';
Это состояние
this.state = {
redirect: false,
username: '',
l_password: ''
}
API Fetch и функция setRedirect
setRedirect =() =>{
this.setState({
redirect: true
});
}
handleLogin =(event) =>{
event.preventDefault();
fetch('/oauth/token',
{
method: "POST",
headers:{
'Accept': 'application/json',
'Content-Type': 'application/x-www-form-urlencoded',
},
body:`grant_type=password&username=${this.state.username}&password=${this.state.l_password}&client_id=4&client_secret=LT7raDKvPwIUrDFJBISlhpzAXu6cSYiLBGhrUmTm&scope=*`
}
)
.then(response =>
response.json()
)
.then(responseJson => {
const returnObj = responseJson;
console.log(returnObj);
sessionStorage.setItem('resData', JSON.stringify(returnObj));
console.log(this.state.redirect);
if(this.state.redirect === true){
return (
<Router><Route path="/dashboard" component={Dashboard} /></Router>
);
}
else{
<Redirect to="/" />
}
});
this.setState({
username: '',
l_password:''
});
}
Форма
<Form onSubmit={this.handleLogin}>
<Form.Group controlId="formBasicEmail">
<Form.Label>Email address</Form.Label>
<Form.Control type="email" placeholder="Enter email"
autofoccus="true"
autoComplete="new-email"
onChange= {this.ChangeText}
name="username"
value={this.state.username}
/>
</Form.Group>
<Form.Group controlId="formBasicPassword">
<Form.Label>Password</Form.Label>
<Form.Control type="password" placeholder="Password" autoComplete="new-password"
onChange= {this.ChangeText}
name="l_password"
value={this.state.l_password}
/>
</Form.Group>
<Button
onClick={this.setRedirect.bind(this)}
variant="primary" type="submit" size="lg" block>
Login
</Button>
<Form.Group controlId="formBasicChecbox">
<Form.Check type="checkbox" label="Remember" />
<a href="#" style={{float:'right', marginTop:-23}}>Forgot Password?</a>
</Form.Group>
<div id="error"></div>
<div className="clear-fix"></div>
<hr/>
</Form>
То, чего я намерен добиться, - это перенаправить страницу на панель инструментов, если перенаправление имеет значение true, в противном случае - домашняя страница