使用AWS Amplify通过网站登录到Chrome扩展程序

泛滥

我正在构建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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用VBA登录到网站

硒:如何使用硒打开chrome扩展名/或登录到chrome扩展名

使用 awssdk for php 登录到 aws connect

Google Fire使用Firebase登录Chrome中的Chrome扩展程序

登录到网站而不使用Webview

使用curl登录到网站并下载网页

使用Angular登录到SharePoint网站

使用R登录到.NET网站

如何使用 python 登录到 AngularJS 网站?

AWS:无法使用 sso 凭证登录到 aws-sdk

如何在 Chrome 扩展程序中启用使用 Google 登录?

使用请求登录到具有javascript登录表单的网站

如何将Chrome驱动程序与Selenium一起使用Python登录到Applemusic

使用帐户,用户名,密码登录到AWS Console

使用非root用户登录到AWS实例

通过AWS Amplify的withAuthenticator()登录后是否可以触发功能?

Google Hangouts Chrome扩展程序中的永久登录按钮;无法登录并使用该应用

登录到需要使用C#的Cookies的网站

如何使用 selenium python 登录到多个网站 url

使用selenium-webdriver自动登录到Facebook后,无法通过Google Chrome浏览器的警报。语言是Javascript / JS

如何使用已登录的 Chrome 扩展程序在 Chrome 实例中随机浏览网页?

使用Podman的AWS ECR登录

为使用React的网站制作Chrome扩展程序。重新渲染后如何保留更改?

如何使用Chrome扩展程序内容脚本将具有相同域的多个网站进行匹配

Chrome扩展程序可在所有网站上使用,并仅对少数几个网站执行不同的操作

无法通过 pgadmin 使用 docker compose 登录到 Postgres

通过ssh登录到上次使用的文件夹

无法使用smbclient登录到samba共享,但通过cifs挂载

使用Google用户以外的其他Google用户登录Chrome扩展程序