gpt4 book ai didi

react-native - 如何将 Amplify Cognito session 从 native react 传递到 webview?

转载 作者:行者123 更新时间:2023-12-05 07:17:59 27 4
gpt4 key购买 nike

我有一个 react native 应用程序呈现 Web 应用程序的 WebView

React native 应用程序使用 Cognito 和 Amplify 进行身份验证。该 Web 应用程序还使用相同的 Cognito 和 Amplify 进行身份验证。

我在 react native 中构建了一个登录流程,其中包含电子邮件/密码登录和社交媒体联合 Oauth 登录。这两个登录流程都在 native react 空间中成功运行并返回

CognitoUserSession {
idToken: CognitoIdToken,
refreshToken: CognitoRefreshToken,
accessToken: CognitoAccessToken,
clockDrift: 0
}

当 native 应用程序呈现 WebView 时,网络应用程序未经身份验证。我能够将 CognitoUserSession 数据成功传递到 WebView 中。不幸的是,我看不到让 Amplify 重新验证此 session 的方法。

最佳答案

这是我编写的有效的 mobileLogin 函数

import Amplify, { Auth } from 'aws-amplify';
import {
CognitoUser,
CognitoUserSession,
CognitoIdToken,
CognitoRefreshToken,
CognitoAccessToken,
} from 'amazon-cognito-identity-js';

window.mobileLogin = async function(mobileSession) {
amplify = Amplify.configure({
...config().amplify,
userPoolWebClientId: '', //switch to mobile client
});

const localSession = new CognitoUserSession({
IdToken: new CognitoIdToken({ IdToken: mobileSession.idToken.jwtToken }),
RefreshToken: new CognitoRefreshToken({ RefreshToken: mobileSession.refreshToken }),
AccessToken: new CognitoAccessToken({ AccessToken: mobileSession.accessToken.jwtToken }),
});

const localUser = new CognitoUser({
Username: mobileSession.accessToken.payload.username,
Pool: Auth.userPool,
Storage: Auth.userPool.storage,
});
localUser.setSignInUserSession(localSession);

// this seems like a hack
Auth.currentCredentials = async () => localSession;

try {
await Auth.currentSession();
console.warn(`mobile login current session!!`);
store.dispatch(silentReloginAction())
} catch (ex) {
console.warn(`mobile login ${ex}`);
}
};
}

关于react-native - 如何将 Amplify Cognito session 从 native react 传递到 webview?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58532049/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com