我的Angular SPA应用程序由需要Basic Auth的Apache服务器提供服务。 该应用程序还需要使用需要Basic Auth(相同凭据)的REST API
因此,当用户首次导航到该页面时,他必须在服务器甚至发送Angular应用程序之前提供其凭据。但是,一旦用户获得应用程序,该应用程序就不知道用于访问REST API的凭据。我必须向用户显示第二个登录页面,因此应用程序可以将身份验证凭据存储在cookie或localStorage中。
我有什么方法可以让服务器&#34;嵌入&#34;用户使用Angular SPA的$ _SERVER [&#39; PHP_AUTH_USER&#39;]和$ _SERVER [&#39; PHP_AUTH_PASSWORD&#39;],因此用户不必登录两次?< / p>
例如:
<body>
<script>
localStorage.setItem("auth_token", "<?php base64_encode($_SERVER['PHP_AUTH_USER'].":".$_SERVER['PHP_AUTH_PASSWORD']); ?>");
</script>
<app-root></app-root>
...
</body>
&#13;
getProject(): Promise<Project> {
let auth_token = localStorage.getItem('auth_token');
let headers = new Headers();
headers.append('Authorization', 'Basic ' + auth_token);
let options = new RequestOptions({headers: headers});
return this.http
.get(this.restApiUrl, options )
.toPromise()
.then(response => response.json().data as Project)
.catch(this.handleError);
}
&#13;
(这个解决方案没有用。即使我输入凭据,我也需要401授权。)
答案 0 :(得分:0)
base64_encode返回字符串或false。它不打印输出。为此,您可以使用echo
。您可以通过查看脚本标记中呈现页面的来源来验证这一点。 localStorage.setItem("//php didn't output anything here")
echo base64_encode($_SERVER['PHP_AUTH_USER'].":".$_SERVER['PHP_AUTH_PASSWORD']);