Я в настоящее время разрабатываю приложение, которое требует входа / выхода. Я использую google-login-реагировать (Google OAuth2) для обработки большей части подписи в тяжелой работе. Оттуда я публикую токен доступа Google вместе с некоторыми другими вещами (идентификатор, адрес электронной почты, последний логин и т. Д.) В моем RESTful API. После аутентификации пользователя они перенаправляются на панель мониторинга. Оттуда пользователь может выйти из приложения.
С чем я сталкиваюсь, это ОБНОВЛЕНИЕ пользователя и пользовательского объекта после того, как пользователь снова войдет в систему. Прямо сейчас, каждый раз, когда пользователь снова входит в систему, он публикует новый объект (и, следовательно, нового пользователя) в моем API. Я просто хочу показать обновленный LAST LOGIN и сохранить существующего пользователя в идентификаторе, который он уже назначил при первоначальном входе в систему.
Прямо сейчас, это то, что я имею до сих пор:
PostData.js
export function PostData(type, userData) {
let BaseURL = 'https://app.someApp.com/';
return new Promise((resolve, reject) =>{
fetch(BaseURL+type, {
headers:{
"Accept": "application/json",
"Content-Type": "application/json"},
'Access-Control-Allow-Origin':'*',
'Content-Security-Policy':'upgrade-insecure-requests',
method: 'POST',
mode: 'cors',
body: JSON.stringify(userData)
})
.then((response) => response.json())
.then((res) => {
resolve(res);
})
.catch((error) => {
reject(error);
});
});
}
Login.js
class Login extends Component {
constructor(props) {
super(props);
this.state = {
loginError: false,
redirect: false
};
this.signup = this.signup.bind(this);
}
signup(res, type) {
let postData;
var currentTime = new Date();
if (type === 'google' && res.profileObj.email) {
postData = {
email: res.profileObj.email,
realname: res.profileObj.name,
googleId: res.profileObj.googleId,
googleAccessToken: res.Zi.access_token,
googleImageURL: res.profileObj.imageUrl,
lastLogin: currentTime
};
}
if (postData) {
PostData('api/v1/appUsers', postData).then((result) => {
let responseJson = result;
localStorage.setItem("userData", JSON.stringify(responseJson));
this.setState({redirect: true});
});
} else {}
};
render() {
if (this.state.redirect || localStorage.getItem('userData')) {
return (<Redirect to={'/'}/>)
}
const responseGoogle = (response) => {
let isSignedIn = true;
console.log("google console");
console.log(response);
console.log(isSignedIn);
this.signup(response, 'google');
return isSignedIn;
}
Home.js
signOut(e) {
e.preventDefault()
if (localStorage.getItem('userData')) {
localStorage.removeItem('userData');
this.props.history.push('/login')
console.log('shit works');
}
}
constructor(props){
super(props);
this.state = {
name:'',
redirect: false,
};
}
componentDidMount() {
let data = JSON.parse(localStorage.getItem('userData'));
console.log(data);
}
render() {
if(!localStorage.getItem('userData') || this.state.redirect){
return (<Redirect to={'/login'}/>)
}
** Я в основном ищу синтаксическое решение, а не логическое решение, так как мне известна логика, стоящая за этим