【问题标题】:Angular 2 Environment Variables - Setting basic auth passwordAngular 2 环境变量 - 设置基本身份验证密码
【发布时间】:2017-08-12 09:00:09
【问题描述】:

我使用sails.js 编写了一个非常简单的服务。它使用基本身份验证来访问其服务。

我还有一个用 Angular 编写的单独前端,使用 @angular/cli。

我为 prod 和 dev 设置了两组环境变量。例如:

// dev
ADMIN=admin
ADMIN_PASS=mypassword123
API_ENDPOINT=http://localhost:1337/endpoint

这对于 prod 来说显然是不同的。我的问题是我正在使用 Heroku 部署它。您可以轻松地在 heroku 中设置环境变量,但我不知道如何访问它们。我知道你可以在src/environments 中设置东西,但这会将我的变量置于代码控制中。

我也尝试过process.env,但我了解到这是一个 node.js 的东西,而不是 Angular 的东西。

如何从 angular2 访问系统环境变量?

我如何使用它的示例:

 @Injectable()
 export class HeroService {
   private heroesUrl = 'api/heroes';  // <- this should be grabbed from environment
   private adminUser = 'admin'; // this line too...
   private adminPass = 'myPassword'; // same with this line... 
   constructor (private http: Http) {}
   getHeroes(): Observable<Hero[]> { ...}
 }

【问题讨论】:

  • 那么您想在部署期间还是在运行应用程序时访问这些变量?
  • 我的想法是两者兼而有之?比如,我将有一个service/something.js that 将使用上面的值调用某个 api 端点。
  • 当您希望向每个客户端公开身份验证数据时,为什么要保护您的 API?
  • 我没有。这是从一个应用程序到另一个应用程序的通信。

标签: javascript angular heroku


【解决方案1】:

编程观点

使用process.env 然后服务器端(nodejs)可以将它们放入一个结构中。由于您使用的是sails.js,请设置post 路由或API 调用,以json 格式发送此结构。

前端(浏览器)应用可以在运行时调用 http.post 来获取它。

这样,参数集就不会在前端应用代码库中捆绑/硬编码。

安全观点

如果第 3 方服务需要密码凭据,则最好从服务器端处理此类调用,如下所示:

(浏览器) -- api 调用 --> (你的服务器) -- api 调用 --> (3rd-party)

这种方式不会暴露给第 3 方的凭据。对服务器的 api 调用应该受到某种身份验证机制的保护。

【讨论】:

  • 如何访问 Angular 中的那些?
  • Angular 在浏览器(客户端)中运行,您绝对不想让这些变量对客户端可见(假设它们应该保密)
  • 这不会将我的 var 暴露给打电话的人吗?
  • @jeff 我试图从纯编程 pov 中解决问题。更新了安全问题的答案。
  • @Jeff 这能回答你的问题吗?
猜你喜欢
  • 2017-04-11
  • 2019-07-22
  • 1970-01-01
  • 2016-11-17
  • 2016-05-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多