我正在构建chrome扩展程序,并尝试实现用户登录和注册。我最初在chrome扩展程序的弹出部分中具有注册和登录功能,但是在研究了一些更流行的chrome扩展程序(如Grammarly和Honey)之后,我意识到他们使用他们的网站登录并注册了用户。由于各种原因,我决定这样做。
我正在为我的网站和弹出窗口使用React js。我正在使用AWS-Amplify处理登录,注册和用户会话。当我打开弹出窗口时,让我使用await Auth.currentSession();
登录到我的网站后,检查是否使用了用户会话await Auth.signIn(email, password);
。但是,这不起作用。我已经阅读了Amplify文档,但找不到答案。我的弹出窗口中有需要访问AWS服务的功能。
如何使用AWS-Amplify通过我的网站登录我的chrome扩展程序?
我最终弄清楚了这一点。我不确定这是否是执行此操作的“正确方法”,但它是否有效。在我的React Web应用上使用amplify登录后,我可以抓取会话并将其发送到chrome扩展程序。但是,只能通过扩展消息传递API发送JSONifible对象。因此,会话附带的所有功能都将丢失。但是,您可以根据可通过消息传递api发送的信息来重建会话。您重建会话,创建一个新的CognitoUser对象,然后将该会话附加到用户。一旦完成,会话将被存储,并且可以使用它进行放大。
在网络端。
//Get the current session from aws amplify
const session = await Auth.currentSession();
const extensionId = 'your_extension_id';
chrome.runtime.sendMessage(extensionID, session,
function(response) {
// console.log(response);
});
在background.js的扩展端
// This is all needed to reconstruct the session
import {
CognitoIdToken,
CognitoAccessToken,
CognitoRefreshToken,
CognitoUserSession,
CognitoUser,
CognitoUserPool
} from "amazon-cognito-identity-js";
import {Auth} from "aws-amplify";
//Listen for incoming external messages.
chrome.runtime.onMessageExternal.addListener(
async function (request, sender, sendResponse) {
if (request.session) {
authenticateUser(request.session);;
} else {
console.log(request);
}
sendResponse("OK")
});
//Re-build the session and authenticate the user
export const authenticateUser = async (session) => {
let idToken = new CognitoIdToken({
IdToken: session.idToken.jwtToken
});
let accessToken = new CognitoAccessToken({
AccessToken: session.accessToken.jwtToken
});
let refreshToken = new CognitoRefreshToken({
RefreshToken: session.refreshToken.token
});
let clockDrift = session.clockDrift;
const sessionData = {
IdToken: idToken,
AccessToken: accessToken,
RefreshToken: refreshToken,
ClockDrift: clockDrift
}
// Create the session
let userSession = new CognitoUserSession(sessionData);
const userData = {
Username: userSession.getIdToken().payload['cognito:username'],
Pool: new CognitoUserPool({UserPoolId: YOUR_USER_POOL_ID, ClientId: YOUR_APP_CLIENT_ID})
}
// Make a new cognito user
const cognitoUser = new CognitoUser(userData);
// Attach the session to the user
cognitoUser.setSignInUserSession(userSession);
// Check to make sure it works
cognitoUser.getSession(function(err, session) {
if(session){
//Do whatever you want here
} else {
console.error("Error", err);
}
})
// The session is now stored and the amplify library can access it to do
// whatever it needs to.
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句