2015-12-14 3 views
5

次のトピックについていくつかの助けとアドバイスが必要です。Laravel 5:Apache php http authentication

私のboosはApacheサーバーの設定が単純で、a simple php authの設定もあります。このようなパネルを使用してユーザーが検証されるとすぐに、

enter image description here

彼/彼女は、その背後に実行されているすべてのアプリケーションへのアクセスよりも持っています。つまり、このパネルは「ゲート」として機能し、ゲートを越えてアクセスすることができます(もちろん、Webサーバー上で実行される許可テーブルがあります)。

問題

私はLaravel 5を使用して構築していますアプリケーションは、ゲートの後ろに実行する必要があるので、アプリは、ユーザーが誰であるかを知っておく必要があることを意味します。私は現在ログインusernameを取得することができ$_SERVER['PHP_AUTH_USER'];を使用

しかし、どのような場合、私は私のアプリでuser's行動を追跡したいですか? $this->user_idのようなものが必要ですか?

私は彼がusernameをフェッチし、Laravelの背後で実行しているデータベースに保存してユーザーを作成して、ユーザーが 'ゲート'を通過するとすぐに考えていました。

if(isset($_SERVER)) 
    { 
    if (array_key_exists('PHP_AUTH_USER', $_SERVER)) { 
     $agent = $_SERVER['PHP_AUTH_USER']; //Request::server('PHP_AUTH_USER') 

    } 

    $user = User::create([ 
     'username' => $agent, 

     ]); 
    } 

これは、ユーザーがページを更新するたびにユーザーを作成します。しかし、これを行う最善の方法は何ですか?

  1. は、私は(私はAppServiceProviderに上記のコードをテストした)別のプロバイダが必要ですか?

  2. usernameを保存した後で、$this->user_idのようにするにはどうすればよいですか?

:私はLaravelは、箱から出して、基本的な認証を持って知っているが、ユーザが自分のデータベースにはまだありませんので、これは動作しません。私は最初に上記のようにそれらを作成する必要があります。

+0

ページにアクセスできるユーザーはいくつですか?どのオーディエンスにも公開されているのですか?N人の固定ユーザーが使用する内部ページですか? – lesssugar

+0

会社内の@lesssugarユーザーはすべてのアクセス権を持っています(もちろん、ログインに合格した後)。インターネットから公的にアクセスできない(あなたが意味するものなら) – user3641381

答えて

1

まず、提供されたユーザ名を持つユーザーが既にデータベースに存在するかどうかをチェックする必要があります。この方法では、リフレッシュごとに新しいユーザーを作成することはありません。 Auth::login($user);を使用すると、Laravelが提供するauthミドルウェア(auth.basic!ではなく)を使用できるようにユーザーにログインできます。この方法で、認証ファサードでアプリケーション全体にアクセスし、ユーザーに関する追加情報を保存できます。

if(isset($_SERVER)) 
{ 
    if (array_key_exists('PHP_AUTH_USER', $_SERVER)) { 
     $agent = $_SERVER['PHP_AUTH_USER']; //Request::server('PHP_AUTH_USER') 

     // Try to find an existing user, or create a new one if the user does not exist 
     $user = User::firstOrCreate([ 
      'username' => $agent, 
     ]); 

     // Authenticate the user 
     \Auth::loginUsingId($user->id); 
    } 
} 
+0

上記のコードを別のプロバイダに置くことをお勧めしますか(一度だけ起動されるようにする)、あるいは 'AppServiceProvider'に保持することをお勧めしますか?あるコマンドラインを実行するたびにErrorException 'undefined variable:agent'が出るので、 – user3641381

+0

2番目のifステートメントの中にログインコードを置くべきです。それに応じて私の答えを更新しました。職人はもう失敗しないはずです。 AppServiceProviderの中に配置することができます。アプリケーションが大きくなるにつれて上記のコードを専用のサービスプロバイダに移してみましょう。最終的には、独自のカスタムAuthプロバイダを実装することをおすすめします。http://laravel.com/docs/5.1/authentication#adding-custom-authentication-drivers – tommy

+0

これをテストしました。 1人のユーザーしか作成しません!例えばログインするとログインユーザー名を持つユーザーが作成されますが、会社の他のユーザーがURLにもアクセスしようとした場合(ログインすることを意味します)、ユーザーから「ユーザー」を作成しない場合。何か案は? – user3641381

1

あなたが聞きたいことではないことは分かっていますが、実際にはLaravelの認証を使用します。 Apacheの基本認証は、権限のないユーザーがあなたのページにアクセスするのを防ぎ、おそらくページがボットによってクロールされるのを防ぎ、アプリケーションへのログインフォームとしては機能しません。

Apache authの資格情報を1つ作成すると、その資格を持つすべての人がページにアクセスできます。しかし、ユーザーごとに固有のユーザー名とパスワードを持つ標準のログインフォームを作成します。この方法では、誰かがApacheを経由して管理していても、まだログインしていません。

セキュリティ上、この方法があります。また、このようにすることで、新しい可能性を開くことができます。優先言語や権限の範囲など、ユーザーの詳細を格納できます。

はそれについて考えてみよう:)

+0

時間を割いて私の質問に答えてくれてありがとう。はい、質問を投稿する前にsugessetdオプションを検討しました。しかし、私は解決策が必要ですが、後で別のプロバイダに展開します。 – user3641381