Как я могу обновить пользователя ПОСЛЕ того, как он вышел из моего приложения, а затем войти в систему - PullRequest
0 голосов
/ 10 января 2019

Я в настоящее время разрабатываю приложение, которое требует входа / выхода. Я использую 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'}/>)
      }

** Я в основном ищу синтаксическое решение, а не логическое решение, так как мне известна логика, стоящая за этим

...