Как сохранить пользователя вошедшим в систему при помощи aws ampify - PullRequest
0 голосов
/ 29 мая 2018

Я уже закончил получать пользователя из aws cognito и как я могу сделать это правильно, чтобы пользователь вошел в систему, даже когда собственное приложение реагирует на закрытие

  state = {
    isAuthenticated: false
  }

  authenticate(isAuthenticated) {
    this.setState({ isAuthenticated })
  }
  render() {
    if (this.state.isAuthenticated) {
      console.log('Auth: ', Auth)
      return (
        <View style={{ flex: 1, justifyContent: 'center', alignItems: 'center' }}>
          <Text>Hello {Auth.user.username}!</Text>
        </View>
      )
    }
    return (
      <View style={styles.container}>
        <Tabs
          screenProps={{
            authenticate: this.authenticate.bind(this)
          }}
        />
      </View>
    );
  }
}

Ответы [ 2 ]

0 голосов
/ 27 февраля 2019

Если вы используете API аутентификации, предоставляемый Amplify, то после использования Auth.signIn этот API будет управлять состоянием сеанса.

В вашем основном компоненте входа (вероятно, App.js) установите флажокМетод componentDidMount (), который Auth.currentAuthenticatedUser () будет возвращать до и после того, как вы вошли с действительным пользователем.

... // standard imports
import Amplify, { Auth } from 'aws-amplify';
import awsmobile from './aws-exports';
Amplify.configure(awsmobile);

class App extends Component {
   state = { isLoggedIn: false }
   ...
   async componentDidMount() {
     try {
       const authedUser = await Auth.currentAuthenticatedUser();
       console.log(authedUser) // this means that you've logged in before with valid user/pass. 
       this.setState({ isLoggedIn: true })
     } catch(err) {
       console.log(err) // this means there is no currently authenticated user
     }
   }

   render() {
     if(this.state.isLoggedIn) {
       return <Homescreen /> // or whatever your entry component is
     }
     else {
       return <Login />
     }
   }
}
0 голосов
/ 29 мая 2018

Использовать AsyncStorage ---------

state = {
    isAuthenticated: false
  }

componentWillMount(){
const value = await AsyncStorage.getItem('@Mylogin:key');
  if (value !== null){
    this.setState({
    isAuthenticated: true
    }) 
  } 
}

  authenticate(isAuthenticated) {
    this.setState({ isAuthenticated });
    AsyncStorage.setItem('@Mylogin:key', 'Loggedin');
  }

  render() {
    if (this.state.isAuthenticated) {
      console.log('Auth: ', Auth)
      return (
        <View style={{ flex: 1, justifyContent: 'center', alignItems: 'center' }}>
          <Text>Hello {Auth.user.username}!</Text>
        </View>
      )
    }
    return (
      <View style={styles.container}>
        <Tabs
          screenProps={{
            authenticate: this.authenticate.bind(this)
          }}
        />
      </View>
    );
  }
}
...