Тип объекта неизвестен с аутентификацией AWS Cognito - PullRequest
0 голосов
/ 14 июля 2020

Я пытаюсь настроить AWS аутентификацию Cognito в моем приложении react. Когда я пытаюсь получить некоторые значения из возвращаемого объекта, я получаю следующую ошибку:

Object is of type 'unknown'.ts(2571)

Я ищу способы исправить эту проблему, но не знаю, как мне нужно объявить значение, чтобы исправить это. Код, который у меня есть до сих пор, похож на тот, который содержится в документации npm для AWS Cognito для случаев 1 и 4.

- Код -

import { AuthActionTypes, AuthState } from '../types/auth';
import * as actionTypes from '../types/actionTypes';
import { Dispatch } from 'redux';

import { RootState, RootActionTypes } from '../index.';
import cognitoSignIn from '../../util/SignIn/SignIn';
import cognitoSignUp from '../../util/SignUp/SignUp';



export const authStart = (): AuthActionTypes => {
    return {
        type: actionTypes.AUTH_START
    };
};

export const authSuccess = ( token: string, userId: string ): AuthActionTypes => {
    return {
        type: actionTypes.AUTH_SUCCESS,
        idToken: token,
        userId: userId
    };
};

export const authFail = ( error: Error ): AuthActionTypes => {
    return {
        type: actionTypes.AUTH_FAIL,
        error: error
    };
};

export const auth = (email: string, password: string, loginMethod: string) => {
    return ( dispatch: Dispatch<RootActionTypes>, getState: () => RootState) => {
        dispatch(authStart());

        if (loginMethod === "SignUp") {
            cognitoSignUp( email, password );
        } else if ( loginMethod === "SignIn" ) {
            cognitoSignIn( email, password ).then(
                ( response ) => { /* HERE IS THE PROBLEM */
                    dispatch(authSuccess(response.idToken.jwtToken, response.accessToken.payload.client_id));
            }).catch(
                ( err ) => {
                    console.log(err.message);
                    dispatch(authFail(err.message));
                }
            );
        };        
    };
};

cognitoSignIn находится в SignIn.ts и выглядит следующим образом:

import { AuthenticationDetails, CognitoUserPool, CognitoUser } from 'amazon-cognito-identity-js';

const cognitoSignIn = (email: string, password: string) => new Promise((resolve, reject) => {
    const authenticationData = {
        Username: email,
        Password: password
    };

    const authenticationDetails = new AuthenticationDetails( authenticationData );
   
    const poolData = {
        UserPoolId : XXXXXXXX,
        ClientId : XXXXXXXX
    };  
    const userPool = new CognitoUserPool(poolData);
    
    const userData = {
        Username: email,
        Pool: userPool
    };

    const cognitoUser = new CognitoUser( userData );
    cognitoUser.authenticateUser(authenticationDetails, {
        onSuccess: result => {
            resolve(result);
        },
        onFailure: err => {
            reject(err);
        }
    });
});

export default cognitoSignIn;

1 Ответ

1 голос
/ 14 июля 2020

Вы должны определить тип разрешения Promise в SignIn.ts.

Наименее навязчивым вариантом является импорт CognitoUserSession и вместо создания Promise создать Promise<CognitoUserSession>.

TypeScript Playground

Другой вариант - определить это с помощью стандартной функции. ( TypeScript Playground )

Возможно, вам также потребуется проверить CognitoUserSession, поскольку в последней версии он использует функции, а не прямые свойства (и так было с тех пор, как index.d.ts)

...