Robert_Du 2年前

修改理由:

少了个令牌有效期内容

详细描述:

少了个令牌有效期内容

相关信息:


此投稿由 ojbkkk 2年前 合并。

标题修改:

+ Sanctum API 授权

内容修改:

红色背景 为原始内容

绿色背景 为新增或者修改的内容

OldNewDifferences
1  
21# Laravel Sanctum
32
43- [介绍](#introduction)
 
1110   - [令牌能力](#token-abilities)
1211   - [保护路由](#protecting-routes)
1312   - [撤销令牌](#revoking-tokens)
 13   - [令牌有效期](#token-expiration)  
1414- [SPA 认证](#spa-authentication)
1515   - [配置](#spa-configuration)
1616   - [认证](#spa-authenticating)
 
3636#### API 令牌
3737
3838首先,它是一个简单的包,用于向用户发出 API 令牌,而不涉及 OAuth。这个功能的灵感来自 GitHub 的「访问令牌」。例如,假设应用程序的「帐户设置」有一个界面,用户可以在其中为其帐户生成 API 令牌。你可以使用 Sanctum 来生成和管理这些令牌。这些令牌通常有很长的过期时间(以年计),当然用户可以随时手动将其撤销。
39 
40 
 39
 40
4141Laravel Sanctum 的这个特性是通过将用户 API 令牌存储在单个数据库表中,并通过包含了有效 API 令牌的 `Authorization` 标识头对传入的请求进行身份验证而实现的。
4242
4343<a name="how-it-works-spa-authentication"></a>
 
5656
5757> 技巧:最新版本的 Laravel 已经包含了 Laravel Sanctum,但是,如果您的应用程序中 composer.json 文件里不包含 `"laravel/sanctum"` 的话,您可以按照下面的说明进行安装。
5858
59 
60 
 59
 60
6161您可以通过Composer软件包管理器安装Laravel Sanctum:
6262
6363```shell
 
118118       Sanctum::usePersonalAccessTokenModel(PersonalAccessToken::class);
119119   }
120120
121 
122 
 121
 122
123123<a name="api-token-authentication"></a>
124124## API 令牌认证
125125
 
162162
163163   return $user->createToken('token-name', ['server:update'])->plainTextToken;
164164
165 
166 
 165
 166
167167在处理由 Sanctum 验证的传入请求时,你可以使用 `tokenCan` 方法确定令牌是否具有给定的能力:
168168
169169   if ($user->tokenCan('server:update')) {
 
197197
198198但是,这并不一定意味着你的应用必须允许用户执行操作。通常,你的应用的 [授权策略](/docs/laravel/9.x/authorization#creating-policies) 将确定令牌是否已被授予执行能力的权限,并检查是否应允许用户实例本身来执行操作。
199199
200 
201 
 200
 201
202202例如,假设我们有一个管理服务器的应用,那就要检查令牌是否有权更新服务器 **和** 服务器是否属于用户:
203203
204204```php
 
221221       return $request->user();
222222   });
223223
224 
225 
 224
 225
226226<a name="revoking-tokens"></a>
227227### 撤销令牌
228228
 
237237   // 撤销指定令牌...
238238   $user->tokens()->where('id', $tokenId)->delete();
239239
 240<a name="token-expiration"></a>  
 241### 令牌有效期  
 242  
 243默认情况下,`sanctum` 的`token`无过期时限并且仅能通过[撤销令牌](#revoking-tokens)来使它无效。当然如果您想在您的程序里设置`token`的有效期也是可以的。修改`sanctum`的配置文件中的`expiration`选项(默认为null),此选项设置的数字表示多少分钟后过期:  
 244  
 245   // 365天后过期  
 246   'expiration' => 525600,  
 247  
 248如果您的程序中配置了`token`的过期时间,那您多半会希望能用[任务调度](/docs/laravel/9.x/scheduling)自动删除过期了的`token`数据。有个好消息,`sanctum` 提供了一个`Artisan`命令,可以实现这个想法:  
 249```sh  
 250   php artisan sanctum:prune-expired  
 251```  
 252比如,您可以设置一个调度任务用于删除你数据库中所有过期超过24小时的`token`记录:  
 253  
 254   $schedule->command('sanctum:prune-expired --hours=24')->daily();  
 255  
240256<a name="spa-authentication"></a>
241257## SPA 认证
242258
 
256272
257273> 注意:如果你通过包含端口 (`127.0.0.1:8000`)的 URL 访问应用程序,则应确保在域中包含端口号。
258274
259 
260 
 275
 276
261277<a name="sanctum-middleware"></a>
262278#### Sanctum 中间件
263279
 
292308<a name="csrf-protection"></a>
293309#### CSRF 保护
294310
295 
296 
 311
 312
297313要验证你的 SPA,你的 SPA 的 「登录」页面应首先向 `/sanctum/csrf-cookie` 发出请求以初始化应用程序的 CSRF 保护:
298314
299315```js
 
315331
316332> 注意:你可以自由编写自己的 `/login` 端点;但是,你应该确保它使用标准的 [Laravel 提供的基于 session 的身份验证服务](/docs/laravel/8.x/authentication#authenticating-users) 对用户进行身份验证。通常,这意味着使用 「web」身份验证看守器。
317333
318 
319 
 334
 335
320336<a name="protecting-spa-routes"></a>
321337### 路由保护
322338
 
367383
368384你可以使用 Sanctum 令牌来验证你的移动应用程序对 API 的请求。验证移动应用请求的过程类似于验证第三方 API 请求;但是,在发布 API 令牌的方式上存在细微差别。
369385
370 
371 
 386
 387
372388<a name="issuing-mobile-api-tokens"></a>
373389### 发行 API 令牌
374390
 
412428       return $request->user();
413429   });
414430
415 
416 
 431
 432
417433<a name="revoking-mobile-api-tokens"></a>
418434### 撤销令牌
419435
 
451467       User::factory()->create(),
452468       ['*']
453469   );
 470  
454471
455