AWS Amplify currentAuthenticatedUser는 React Native에서 FB 로그인 후 null이지만 앱이 다시로드되면 currentAuthenticatedUser가 유효한 사용자를 반환합니다.

cmaronchick

Facebook 로그인을 React Native 앱에 통합하려고합니다.

Auth.signIn () 메서드를 성공적으로 구현할 수 있었고 Auth.currentAuthenticatedUser ()를 사용하여 지속적으로 사용자를 검색 할 수 있습니다.

그러나 Facebook 로그인에서 코드를 가져온 후 Auth.currentAuthenticatedUser ()를 사용하면 null이 반환됩니다.

또한 앱을 다시로드하면 Auth.currentAuthenticatedUser ()가 예상대로 사용자를 반환합니다.

토큰을 사용하여 사용자 세션을 만든 후 인증 된 사용자가 있다는 것을 인식하지 못하는 이유를 이해할 수 없습니다.

내 코드는 다음과 같습니다.

getTokenbyCode = async (code) => {
      const details = {
        grant_type: 'authorization_code',
        code,
        client_id: userPool.clientId,
        redirect_uri: AuthSession.getRedirectUrl()
      }
      const formBody = Object.keys(details)
        .map(
          key => `${encodeURIComponent(key)}=${encodeURIComponent(details[key])}`
        )
        .join("&");

      await fetch(
        tokenURL,
        {
          method: "POST",
          headers: {
            'Content-type': 'application/x-www-form-urlencoded;charset=UTF-8'
          },
          body: formBody
        }
      )
        .then(async (res) => {
          let tokenRequestJson = await res.json();
          const IdToken = new CognitoIdToken({ IdToken: tokenRequestJson.id_token });
          const AccessToken = new CognitoAccessToken({ AccessToken: tokenRequestJson.access_token });
          const RefreshToken = new CognitoRefreshToken({ RefreshToken: tokenRequestJson.refresh_token })
          try {
            let userSession = new CognitoUserSession({ IdToken, AccessToken, RefreshToken });
            const userData = {
              Username: userSession.idToken.payload.email,
              Pool: userPool
            };

            cognitoUser = new CognitoUser(userData);
            cognitoUser.setSignInUserSession(userSession);
            cognitoUser.getSession(async (err, session) => { // You must run this to verify that session (internally)
              if (session.isValid()) {

                // EVERYTHING WORKS UP TO HERE <!---------------->

                let cognitoUser = await Auth.currentAuthenticatedUser()
                this.setState({user: cognitoUser})

                this.props.navigation.navigate('AuthLoading', {user: cognitoUser})
              } else {
                console.log('session is not valid: ', session);
              }
            })
          }
          catch (FBSignInError) {
            console.log('FBSignInError: ', FBSignInError)
          }
        })
        .catch(error => {
          console.log('error: ', error);
        });
    }
cmaronchick

나는 이것을 알아 냈지만 무차별 대입에 의해서만 누군가가 이것이 왜 작동하는지 말해주고 싶다면 그것을 들으면 기쁠 것입니다.

내 생각 엔 Auth 모듈을 사용하여 사용자 세션을 설정하면 Auth.currentAuthenticatedUser가 선택할 수 있도록 올바른 위치에 사용자 토큰을 저장합니다.

  cognitoUser = new CognitoUser(userData);
  cognitoUser.setSignInUserSession(userSession);
  let authUser = Auth.createCognitoUser(cognitoUser.getUsername())
  authUser.setSignInUserSession(userSession)

cognitoUser 생성은 필요하지 않을 수 있지만 작동하므로 잘 작동합니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Related 관련 기사

뜨겁다태그

보관