Write the Code. Change the World.

3月 01

bootstrap 脚手架带了登录注册相关的页面和逻辑。这里来测测。然后使用 Sanctum 来处理授权相关的逻辑。它不仅可以处理 web 页面的请求,还可以使用令牌的方式来处理api请求 。

这里是一个提供多平台服务的项目。有来自 app,多家小程序的接口请求,也有后台页面(单spa页面)的请求,还有基于官网的请求。所以 Sanctum 是一个很好的选择

.env 文件中配置好了数据库的信息,并且也创建了数据库后

# 执行迁移生成对应的数据表
php artisan migrate 

打开首页,点击注册页面。输入对应信息,点击注册。成功后会重定向到 /home uri 下。只是,我们之前删除了 home 路由。修改登录后重定向的地址就可以正确重定向了。

# app/Providers/RouteServiceProvider.php

# 修改(之前是 public const HOME = '/home';)
public const HOME = '/';

以上是 laravel 的默认认证方式。还有截图看到的注册页面,在 container 样式后边加了一个 mt-4。因为 app.blade.php 中是没有任何间隙的。

以上只是一个演示。下边就所有的用户认证都用 sanctum 处理。

sanctum 阶段

官网文档: https://laravel.com/docs/10.x/sanctum

laravel10 默认已经安装了 Sanctum 。我们只需要使用 vendor:publish 来发布 Sanctum 的配置和迁移文件。

php artisan vendor:publish --provider="Laravel\Sanctum\SanctumServiceProvider"

其实,默认已经创建了的。

修改 config/auth.php

我们先在 config/auth.php 增加一个 'api' 的守护,这个是给app、小程序这些接口适用的。默认的 'web' 这个是给 web 页面和后台共同使用的,他们公用 cookie,并且支持 csrf 验证。 后台也是通过接口的方式进行调用的。只是这种方式限定了后台的主域和网站的主域要一致。

    'guards' => [
        //原来的
        'web' => [
            'driver' => 'session',
            'provider' => 'users',
        ],

        // 新增的
        'api' => [
            'driver' => 'sanctum',
            'provider' => 'users',
            'hash' => false,
        ]
    ],

修改 .env.example

在末尾追加配置

# .env.example 文件,参与版本控制
# sanctum 白名单
SANCTUM_STATEFUL_DOMAINS=

同样,在 .env 末尾也追加配置

# sanctum 白名单
SANCTUM_STATEFUL_DOMAINS=.xr.com

修改 app/Http/Kernel.php

$middlewareGroups 修改。

…
        'api' => [
            \Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class,
            \Illuminate\Routing\Middleware\ThrottleRequests::class.':api',
            \Illuminate\Routing\Middleware\SubstituteBindings::class,
        ],

$middlewareAliases 修改,在末尾追加下边两个配置。这个不是必须的,有用到就配置。

    protected $middlewareAliases = [
        'auth' => \App\Http\Middleware\Authenticate::class,
        …
        'abilities' => \Laravel\Sanctum\Http\Middleware\CheckAbilities::class,
        'ability' => \Laravel\Sanctum\Http\Middleware\CheckForAnyAbility::class,

增加路由服务的配置

修改 app/Providers/RouteServiceProvider.php, 在 boot 中增加一个后台的配置。修改 api 接口的配置。后台将使用 vue 或 react 做成前 spa 页面。将使用前后端分离的方式。这里虽然看起来是一起,在 nginx 中,会做处理。

            Route::prefix('admin/api')
                ->middleware('web')
                ->group(base_path('routes/admin.php'));

然后,在 routes 文件夹下,增加一个 admin.php 的路由控制文件。

最后对 User 模型进行配置

app/Models/User.php 中增加

protected $guard_name = 'web';

其实,默认就是的了。这里可以不要。如果配置改名了,这里就得用上了。

到此,基于网站的,以及基于后台的(接口),还有基于app,小程序的(接口)用户认证已经配置完成了。

# 网站
ypb2.com

# 后台
ypb2.com/admin/api

# app、小程序接口
ypb2.com/api

后边,将对这三种情景进行测试和验证。

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注