0

私のAngular SPAアプリは、Basic Authが必要なApacheサーバーによって提供されます。 アプリは基本認証(同じ資格情報)を必要とするREST APIを使用する必要がありますAngular SPAに埋め込むために、Apacheサーバーからの基本認証情報を取得しますか?

したがって、ユーザーが最初にページに移動するときに、サーバが角型アプリを送信する前に認証情報を提供する必要があります。しかし、ユーザーがアプリケーションを取得すると、REST APIにアクセスするために使用する資格情報は認識されません。 2番目のログインページをユーザーに提示する必要があります。そのため、アプリケーションはcookieまたはlocalStorageに認証情報を保存できます。

ユーザーが$ _SERVER ['PHP_AUTH_USER']と$ _SERVER ['PHP_AUTH_PASSWORD']をAngular SPAに「埋め込む」方法はありますか?ユーザーは2回ログインする必要はありませんか?

たとえば、何かのように:

  • ユーザーがラッパー
  • PHPラッパーが正確に、それはまた

<body> 
 
    <script> 
 
     localStorage.setItem("auth_token", "<?php base64_encode($_SERVER['PHP_AUTH_USER'].":".$_SERVER['PHP_AUTH_PASSWORD']); ?>"); 
 
    </script> 
 
    <app-root></app-root> 
 
... 
 
</body>
をのlocalStorageするPHP_AUTHの資格情報を保存する以外のindex.htmlのようなものであるindex.phpにナビゲート

  • 角度は

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); 
 
    }
は(このソリューションは動作しませんでしたREST APIにヘッダのためのlocalStorageから資格情報を取得します。資格情報を入力しても401認可が必要になります)

答えて

0

base64_encodeは文字列または偽を返します。出力は印刷されません。そのためにはechoを使用できます。これを確認するには、スクリプトタグ内のレンダリングされたページのソースを確認します。 localStorage.setItem("//php didn't output anything here")

echo base64_encode($_SERVER['PHP_AUTH_USER'].":".$_SERVER['PHP_AUTH_PASSWORD']); 
関連する問題