2015-12-14 366 views
5

我需要一些關於以下主題的幫助和建議。Laravel 5:Apache php http認證

我的噓聲有一個簡單的Apache服務器設置,並有a simple php auth設置。只要用戶使用這樣的面板進行驗證。

enter image description here

他/她比訪問運行它背後的所有應用程序。換句話說,這個面板可以作爲'門戶',如果你在門口,那麼你可以訪問(當然,在Web服務器上運行權限表)。

問題

應用程序我建立使用Laravel 5需要在門後運行,所以這意味着應用程序需要知道用戶是誰。

使用$_SERVER['PHP_AUTH_USER'];我可以取username當前登錄其英寸

但是,如果我想跟蹤我的應用程序的user's行動是什麼?我需要類似$this->user_id的權利?

所以我一直在想用戶通過'gate'時就立即獲取他的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!)。通過這種方式,您可以通過Auth外觀訪問整個App上的用戶,並存儲有關用戶的其他信息:

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'未定義的變量:代理程序' – user3641381

+0

您應該將登錄代碼放在第二個if語句中。我相應地更新了我的答案。工匠不應該失敗了。你可以把它放在AppServiceProvider中。隨着應用程序變得越來越大,我會將上面的代碼轉移到專門的服務提供商中。最終,我建議實施您自己的自定義Auth提供程序:http://laravel.com/docs/5.1/authentication#adding-custom-authentication-drivers – tommy

+0

我已經測試過這個。它只創建一個用戶!所以例如如果我登錄它會創建一個我的用戶(使用登錄用戶名),但如果公司的其他人試圖訪問該網址(我的意思是登錄),而不是從他身上創建一個「用戶」 。有任何想法嗎? – user3641381

1

我知道這不是你想聽到的,但我真的會僱用Laravel的認證。 Apache基本身份驗證應防止未經授權的用戶訪問您的頁面,並可能阻止漫遊器抓取頁面 - 不能用作應用的登錄表單。

爲Apache auth創建一組憑據,所以擁有它的所有人都可以訪問該頁面。但是,然後,創建一個標準的登錄表單,其中包含用戶名和密碼,這對每個用戶都是特定的。這樣,即使有人設法通過Apache,他們仍然不會登錄。

安全方面,這將是一條路。此外,通過這種方式,您可以開闢新的可能性:您可以存儲更多關於用戶的信息,例如他們的首選語言或權限範圍。

想想吧:)

+0

感謝您花時間回答我的問題。是的,我在發佈問題之前已經考慮過您的sugessetd選項。但我需要一種解決方案,後來我將它擴展到我的獨立提供商。 – user3641381