繁体   English   中英

Laravel 5:Apache php http认证

[英]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,

      ]);
  }

但这会让用户每次刷新页面! 但是没有更进一步的最佳方法是什么?

  1. 我需要一个单独的提供程序(我在AppServiceProvider测试了上面的代码)吗?

  2. 保存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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM