2015-12-14 204 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