javascript - 使用 Angular 时隐藏 API key (也许在环境变量中?)

标签 javascript angularjs node.js environment-variables information-hiding

我正在运行一个带有 Node/Express 后端的小型 Angular 应用程序。

在我的 Angular 工厂之一(即在客户端),我向 Github 发出 $http 请求以返回用户信息。但是,需要 Github 生成的 key (意味着保密)才能执行此操作。

我知道我不能在客户端使用 process.env.XYZ。我想知道如何将这个 api key 保密?我是否必须改为在后端提出请求?如果可以,如何将返回的Github数据传输到前端?

抱歉,如果这看起来过于简单,但我是一个相对的新手,所以任何带有代码示例的明确回复将不胜感激。谢谢

最佳答案

不幸的是,您必须在后端代理请求以保密 key 。 (我假设您需要一些用户数据,这些数据无法通过未经身份验证的请求(如 https://api.github.com/users/rsp?callback=foo)获得,否则您一开始就不需要使用 API key - 但您没有具体说明您需要做什么这只是我的猜测)。

你可以做的是这样的:在你的后端你可以为你的前端添加一个新的路由来获取信息。它可以做任何您需要的事情——使用或不使用任何 secret API key 、验证请求、在返回给您的客户端之前处理响应等。

例子:

var app = require('express')();

app.get('/github-user/:user', function (req, res) {
    getUser(req.params.user, function (err, data) {
        if (err) res.json({error: "Some error"});
        else res.json(data);
    });
});

function getUser(user, callback) {
    // a stub function that should do something more
    if (!user) callback("Error");
    else callback(null, {user:user, name:"The user "+user});
}

app.listen(3000, function () {
  console.log('Listening on port 3000');
});

在此示例中,您可以在以下位置获取用户信息:

getUser 函数应该向 GitHub 发出实际请求,在您调用它之前,您可以更改是否确实是您的前端发出请求,例如通过检查“Referer” header 或其他东西,验证输入等。

现在,如果您只需要公共(public)信息,那么您可以像这样使用公共(public) JSON-P API - 一个使用 jQuery 使事情变得简单的示例:

var user = prompt("User name:");
var req = $.getJSON('https://api.github.com/users/'+user);
req.then(function (data) {
  console.log(data);
});

参见 DEMO

关于javascript - 使用 Angular 时隐藏 API key (也许在环境变量中?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37762268/

相关文章:

javascript - 如何在虚拟数据类型中使用 JSONB 数据?

node.js - 在 Node js 中模拟 gcp pubsub 对象。 Jest

javascript - xml 标记的编码错误

angularjs - 在 Azure Service Fabric Web Api 中启用 CORS

javascript - 我如何使用 Mongoose 循环迭代 Mongoose 返回的文档数组?

html - Angular JS 协助添加值和小数

javascript - Angular Directive(指令)不会更新 bool 值

javascript - 从 HTMLCollection 中删除项目

javascript - jquery多个ajax文件上传循环异步与多个进度条

javascript - 用于更改图像的 slider 输入值