[英]Laravel 5: Apache php http authentication
我需要一些關於以下主題的幫助和建議。
我的噓聲有一個簡單的Apache服務器設置,並有一個簡單的PHP身份驗證設置。 只要使用這樣的面板驗證用戶。
他/她可以訪問在其后面運行的所有應用程序。 換句話說,這個面板用作“門”,如果你在門上,那么你就可以訪問(當然在Web服務器上運行了權限表)。
問題
我使用Laravel 5構建的應用程序需要在門后運行,這意味着應用程序需要知道用戶是誰。
使用$_SERVER['PHP_AUTH_USER'];
我可以獲取當前登錄的username
。
但是如果我想跟蹤user's
在我的應用上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,
]);
}
但這會讓用戶每次刷新頁面! 但是沒有更進一步的最佳方法是什么?
我需要一個單獨的提供程序(我在AppServiceProvider
測試了上面的代碼)嗎?
保存username
后,我怎么能這樣做$this->user_id
?
注意 :我知道Laravel有基本的auth開箱即用,但這不起作用,因為用戶還沒有在我的數據庫中。 我需要先像上面那樣創建它們。
我知道這不是你想聽到的,但我真的會使用Laravel的身份驗證。 Apache基本身份驗證應該可以防止未經授權的用戶訪問您的頁面,並可能阻止機器人抓取該頁面 - 而不是作為您的應用程序的登錄表單。
為Apache auth創建一組憑據,因此擁有它的所有人都可以訪問該頁面。 但是,創建一個包含用戶名和密碼的標准登錄表單,該表單將特定於每個用戶。 這樣,即使有人設法通過Apache,他們仍然不會登錄。
在安全方面,這將是一條路。 此外,通過這種方式,您可以開啟新的可能性:您可以存儲有關用戶的更多信息,例如他們的首選語言或權限范圍。
想一想:)
首先,您應該檢查數據庫中是否已存在具有提供的用戶名的用戶。 這樣,您不會在每次刷新時創建新用戶。 然后你可以使用Auth::login($user);
登錄用戶,允許您使用Laravel提供的auth
中間件(不是auth.basic
!)。 這樣,您可以使用Auth Facade通過整個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);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.