Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

125
Views
Inicie sesión en la extensión de Chrome a través del sitio web con AWS amplificar

Estoy creando una extensión de Chrome y estoy tratando de implementar el inicio de sesión y el registro del usuario. Originalmente tenía la funcionalidad de registro e inicio de sesión en la parte emergente de mi extensión de Chrome pero, después de examinar algunas de las extensiones de Chrome más populares como Grammarly y Honey, me di cuenta de que usan sus sitios web para iniciar sesión y registrar usuarios. Decidí hacer lo mismo por varias razones.

Estoy usando React js tanto para mi sitio web como para la ventana emergente. Estoy usando AWS-Amplify para manejar el inicio de sesión, el registro y las sesiones de usuario. Cuando abro la ventana emergente, busco una sesión de usuario usando await Auth.currentSession(); después de haber iniciado sesión en mi sitio con await Auth.signIn(email, password); . Sin embargo, eso no funciona. He leído los documentos de Amplify pero no pude encontrar una respuesta. Tengo una funcionalidad en mi ventana emergente que requiere acceso a los servicios de AWS.

¿Cómo puedo usar AWS-Amplify para iniciar sesión en mi extensión de Chrome a través de mi sitio web?

over 4 years ago · Santiago Trujillo
2 answers
Answer question

0

Terminé resolviendo esto. No estoy seguro de si esta es la "manera correcta" de hacerlo, pero funciona. Después de iniciar sesión usando amplificar en mi aplicación web de reacción, puedo tomar la sesión y enviarla a la extensión de Chrome. Sin embargo, solo los objetos compatibles con JSON se pueden enviar a través de la API de mensajería de extensión. Entonces todas las funciones que vienen con la sesión se pierden. Sin embargo, puede reconstruir la sesión a partir de la información que se puede enviar a través de la API de mensajería. Usted reconstruye la sesión, crea un nuevo objeto CognitoUser y luego adjunta la sesión al usuario. Una vez hecho esto, la sesión se almacenará y amplificará podrá usarla.

En el lado de la web.

 //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); });

En el lado de la extensión en 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. }
over 4 years ago · Santiago Trujillo Report

0

Hay una opción de configuración en AWS Amplify donde puede anular el almacenamiento de token predeterminado (que es almacenamiento local en el navegador)

 class MyStorage { // the promise returned from sync function static syncPromise = null; // set item with the key static setItem(key: string, value: string): string; // get item with the key static getItem(key: string): string; // remove item with the key static removeItem(key: string): void; // clear out the storage static clear(): void; // If the storage operations are async(ie AsyncStorage) // Then you need to sync those items into the memory in this method static sync(): Promise<void> { if (!MyStorage.syncPromise) { MyStorage.syncPromise = new Promise((res, rej) => {}); } return MyStorage.syncPromise; } } // tell Auth to use your storage object Auth.configure({ // REQUIRED - Amazon Cognito Region region: process.env.REACT_APP_AWS_REGION, // OPTIONAL - Amazon Cognito User Pool ID userPoolId: process.env.REACT_APP_COGNITO_USER_POOL_ID, // OPTIONAL - Amazon Cognito Web Client ID (26-char alphanumeric string) userPoolWebClientId: process.env.REACT_APP_COGNITO_USER_POOL_CLIENT_ID, // OPTIONAL - customized storage object storage: MyStorage });

Más información aquí

Lo que podrías hacer es algo como esto, usando la API de chrome.store

 export class TokensStorage { static setItem(key, value) { chrome.storage.local.set({[key]: JSON.stringify(value)}, () => { console.log('token stored'); }); } // get item with the key static getItem(key) { return new Promise((resolve, reject) => { chrome.storage.local.get([key], (result) => { resolve(result) }); }) } // remove item with the key static removeItem(key) { chrome.storage.local.remove(key, () => { console.log("item removed"); }) } // clear out the storage static clear() { chrome.storage.local.clear(() => { console.log("storage cleared"); }) } }
over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!