chrome扩展程序从网站获取会话数据

时间:2019-04-26 21:28:22

标签: django api google-chrome session google-chrome-extension

在我的django项目中,我有一个设置了login_required的网址,因为我需要其中的request.user变量来处理某些数据,

我还创建了一个简单的chrome扩展程序,在该扩展程序中,我将不得不向该django项目url发送请求。

我不想使用扩展名中的用户名和密码登录并发送请求

我要:

  • 将扩展程序安装到我的网站时重定向用户
  • 他们将登录,
  • 该扩展程序将知道用户已经登录,并且将获取(并保存)一个密钥,我可以在成功登录后将其插入页面中
  • 该键可用作请求中的查询参数,以识别没有任何用户名和密码的用户

很抱歉,这似乎是一个愚蠢的问题,但是我对如何执行此操作感到非常困惑

PS:我已经有了一个系统,用户可以在不登录的情况下使用密钥来发出请求, 我只需要一种在安装扩展程序时打开选项卡的方法,然后登录然后获取密钥(登录后将在页面中注入密钥),并保存它以便以后在扩展程序中使用。

1 个答案:

答案 0 :(得分:0)

首次打开扩展程序时,我正在向用户显示一个登录页面。登录页面将用户名和密码发送到经过身份验证的API。如果信息正确,则返回所需的用户信息(主要是API密钥)。然后将信息保存到本地存储中。

var username = document.querySelector('[name="username"]');
var password = document.querySelector('[name="password"]');

$.ajax({
    URL : 'https://example.com/api/extension-auth/',
    type: 'POST',
    crossDomain: true,
    data: JSON.stringify({
        'username': username.value.trim(),
        'password': password.value.trim(),
    }),
    success: res => {
        if (res.api_key) {
            browser.storage.sync.set({ 'user_data': {'api_key': api_key} }, () => {
                // show extension main logged in page
            });
        }
        else {
            // show invalid login information alert
        }
    },
    error: function (err) {
        // show server error aler 
    },
});

每次打开扩展名时,都会检查本地存储

browser.storage.sync.get('user_data', data => {
    if (data.user_data) {
        if (valid_api_key(data.user_data.api_key)) {
            // show extension main logged in page
        }
        else {
            // show login page
        }
    }
    else {
        // show login page
    }
});

valid_api_key函数对API进行随机调用,以检查是否没有验证错误。

然后,我使用本地存储中保存的API密钥进行API请求。