【问题标题】:Laravel 5: Apache php http authenticationLaravel 5:Apache php http 身份验证
【发布时间】:2016-03-19 22:50:01
【问题描述】:

我需要一些关于以下主题的帮助和建议。

我的嘘声有一个简单的 Apache 服务器设置,也有 a simple php auth 设置。一旦使用这样的面板验证用户。

他/她可以访问其背后运行的所有应用程序。所以换句话说,这个面板作为一个“门”,如果你在门外,那么你就可以访问(当然,Web 服务器上运行着权限表)。

问题

我使用 Laravel 5 构建的应用程序需要在门后运行,这意味着应用程序需要知道用户是谁。

使用$_SERVER['PHP_AUTH_USER'];我可以获取当前登录的username

但是,如果我想跟踪我的应用程序上的 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 有开箱即用的基本身份验证,但这不起作用,因为用户还没有在我的数据库中。我需要像上面一样首先创建它们。

【问题讨论】:

  • 有多少用户可以访问该页面?它是对任何受众公开可用,还是将由 N 个固定用户使用的内部页面?
  • 公司内部的@lesssugar 用户拥有所有访问权限(当然在您通过登录之后)。它不能从互联网上公开访问(如果你的意思是这样的话)

标签: php apache laravel


【解决方案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);
    }
}

【讨论】:

  • 您会建议将上述代码放在不同的提供程序中(只触发一次)还是将其保留在AppServiceProvider 中?因为每次我运行某个命令行时,我都会得到 ErrorException undefined variable: agent
  • 您应该将登录代码放在您的第二个 if 语句中。我相应地更新了我的答案。工匠不应该再失败了。您可以将它放在 AppServiceProvider 中。随着应用程序变得越来越大,我会将上面的代码移动到专门的服务提供商中。最终,我建议实现您自己的自定义身份验证提供程序:laravel.com/docs/5.1/…
  • 我已经测试过了。它只会创建一个用户!因此,例如,如果我登录它会创建一个我的用户(使用登录用户名),但如果公司中的其他人也尝试访问该 URL(我的意思是登录),那么它不会从他那里创建一个 user .有什么想法吗?
【解决方案2】:

我知道这不是你想听到的,但我真的会使用 Laravel 的身份验证。 Apache 基本身份验证应防止未经授权的用户访问您的页面,并可能防止该页面被机器人抓取 - 不用作您应用的登录表单。

为 Apache auth 创建一组凭据,以便所有拥有它的人都可以访问该页面。但是,然后,使用用户名和密码创建一个标准登录表单,该表单将针对每个用户。这样,即使有人设法通过 Apache,他们仍然不会登录。

在安全方面,这是要走的路。此外,这样做可以打开新的可能性:您可以存储有关用户的更多信息,例如他们的首选语言或权限范围。

想一想:)

【讨论】:

  • 感谢您抽出宝贵时间回答我的问题。是的,在发布问题之前,我确实考虑了您的 sugessetd 选项。但我需要一个可行的解决方案,稍后我会将其扩展到我的单独提供商中。
猜你喜欢
  • 2015-04-25
  • 1970-01-01
  • 2011-05-05
  • 2015-08-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-28
相关资源
最近更新 更多