Как изменить-authState с idToken / refreshToken / AccessToken - PullRequest
0 голосов
/ 20 июня 2019

Мое приложение использует Authenticator-компонент для обработки входа в систему и разрешений через Coginto UserPools. Это прекрасно работает, когда пользователи входят через наш CustomSignIn-компонент.

Однако иногда для входа в систему необходимо пройти через сторонний сайт и обойти компонент CustomSignIn. Я могу получить данные для входа (правильный токен доступа, токен обновления, идентификатор токена), но я не знаю, как изменить authState, используя их. AuthState остается на «вход / выход».

Я попытался использовать федеративный логин (тело содержит правильный access_token, также пробовал с id_token)

const temp = await Auth.federatedSignIn(
  'OurLoginProvider',
  {
  token: body.accessToken,
  expires_at: body.expiresIn,
  },
  'our.user@url.whatever'
)

Вот как выглядит наше приложение на уровне компонентов Authenticator.

<Authenticator
    hide={[Greetings, SignIn, ConfirmSignIn, RequireNewPassword, VerifyContact, ForgotPassword, TOTPSetup, Loading]}
    amplifyConfig={config}
>
    <CustomAwsSignIn    />
    <CustomAwsForgotPassword    />
    <App />
</Authenticator>;

А в App-componentDidMount () я получу правильные токены:

// parsed === singleuse password for fetching tokens from aws userpool, taken from url
const parsed = queryString.parse(this.props.location.search);
if (parsed.code) {
    fetch('https://our.web.url/oauth2/token', {
        method: 'POST',
        headers: {
            'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8',
        },
        body: queryString.stringify({
            grant_type: 'authorization_code',
            code: parsed.code,
            client_id: 'xxxyyxyxyxyxyxyxyxyyxy',
            redirect_uri: 'https://our.redirect-url',
        }),
    })
        .then(function (res) {
            return res.json();
        })
        .then(async function (body) {
            console.log('body', body);
            // this gives me following object
            // {
            //  access_token: "... correct access_token..."
            //  expires_in: 3600
            //  id_token: "... correct id_token..."
            //  refresh_token: "... correct refresh_token..."
            //  token_type: "Bearer"
            // }
        });

Я бы ожидал, что смогу изменить -компоненты authState с этими токенами, но я не нашел способа сделать это.

Auth.federatedSign () - метод выдает следующую ошибку:

NotAuthorizedException: доступ без аутентификации для этого пула удостоверений не поддерживается.

И на самом деле я думаю, что это относится к пулам удостоверений, а не к пользовательским пулам Cognito, которые мы используем.

Должен ли я иметь какой-либо оператор if / троичный оператор, который проверяет, были ли получены эти токены, и запускает компонент App без Authenticator. Например:

{!fetchedTokens ?
 (
 <Authenticator
    hide={[Greetings, SignIn, ConfirmSignIn, RequireNewPassword, 
 VerifyContact, ForgotPassword, TOTPSetup, Loading]}
    amplifyConfig={config}
 >
    <CustomAwsSignIn    />
    <CustomAwsForgotPassword    />
    <App />
 </Authenticator>;
 )
: (
 <App fetchedTokens={fetchedTokens}
)

Любой совет, как поступить в этом?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...