Laravel 11:基本身份验证以保护并向客户展示未完成的应用程序

问题描述 投票:0回答:1

我有一个仍在开发中的应用程序,但它已经部署并运行在服务器上。为了保护它不被引导者或不应该看到它的人访问,我通过服务器配置仪表板(我使用 runcloud)而不是 Laravel 本身启用了基本身份验证。

这一切都工作正常,但由于该应用程序集成了支付功能,我必须实现

POST
路线(webhook),以便外部支付提供商在需要确认付款时点击它。此单一路由不应落后于基本身份验证,否则支付提供商将获得
HTTP 401

所以我有:

  1. 在配置仪表板上禁用基本身份验证
  2. 通过将
    auth.basic
    中间件添加到除 webhook 之外的所有路由中,在 Laravel 级别启用基本身份验证。
    Route::post('/payments/verify', [PaymentsController::class, 'verify'])
        ->name('payments.verify')
        ->withoutMiddleware('auth.basic');

这也有效,但默认情况下,Laravel 将使用

users
表中的电子邮件和密码作为凭据。 我不想要这个。我想要为每个人提供固定且简单的凭据,例如“foo”/“bar”。

我如何在 Laravel 11 中做到这一点?

php laravel authentication basic-authentication
1个回答
0
投票

好的,所以我决定使用中间件来处理它,并且我的云管理软件提供临时域,所以我创建了一个中间件作为我的生产域的别名,然后我定义了以下类:

<?php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Http\Request;
use Symfony\Component\HttpFoundation\Response;

class ServeOverTemporaryDomain
{
    public function handle(Request $request, Closure $next): Response
    {
        if (app()->isProduction() && $request->getHost() === config('app.temporary_domain')) {
            return $next($request);
        }

        if (app()->isProduction() && $request->getHost() === 'my-production-domain.eu') {
            die; // yep, I simply kill the request
        }

        return $next($request);
    }
}

和:

->withMiddleware(function (Middleware $middleware): void {
    $middleware->append(ServeOverTemporaryDomain::class);

其中

config('app.temporary_domain')
'temporary_domain' => env('APP_TEMPORARY_DOMAIN'),
,它指向:

APP_TEMPORARY_DOMAIN=temp.foobar.temp-site.link
在我的
.env.
文件中。

这样,当到达公共已知域时,没有人可以看到任何东西,但没有人知道临时值。 url 下的应用程序和 webhook 都照常工作。

© www.soinside.com 2019 - 2024. All rights reserved.