首页 > 解决方案 > 对象的类型未知,使用 AWS Cognito 身份验证

问题描述

我正在尝试使用我的react应用程序设置 AWS Cognito 身份验证。当我尝试从返回对象中检索一些值时,出现以下错误

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

我正在寻找解决此问题的方法,但我不知道如何声明该值来解决此问题。到目前为止,我的代码类似于案例 1 和案例 4的 AWS Cognito 的 npm 文档中的内容。

- 代码 -

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;

标签: typescriptamazon-web-servicesamazon-cognito

解决方案


您必须在 中定义 Promise 解析类型SignIn.ts

侵入性最小的选项是导入CognitoUserSession而不是创建一个Promise,而是创建一个Promise<CognitoUserSession>.

打字稿游乐场

另一种选择是使用标准函数定义它。(打字稿游乐场

您可能还需要检查CognitoUserSession,因为在最新版本中它使用函数而不是直接属性(并且自从有 a 以来一直如此index.d.ts


推荐阅读