1 頁 (共 1 頁)

[簡記] Laravel 5.2+ api token authentication usage

發表於 : 2019-03-14 22:23:53
yehlu
https://blog.4ze.tw/laravel-5-api-token ... ion-usage/

Laravel新手很難理解其精練美麗的程式碼中背後到底施了什麼黑魔法。自從Passport(Oauth)成為官方推薦的API驗證方法時,我們也很難在官方的文件中找到其實有Passport以外的API驗證方法。但其實是有的——API Token Authentication。在本文中我不探討其原始程式碼與具體的實作細節(因為我也不是很會XD),僅僅讓讀者了解在Laravel 5.5的全新安裝的route/api.php程式碼裡,以下到底發生了什麼事:

Route::middleware('auth:api')->get('/user', function (Request $request) {
return $request->user();
});
注意到auth:api,去翻文件也很難知道這是幹嘛的。

其實Laravel提供了一個Token Guard,負責驗證在request中附加的api_token是否符合資料庫users tables的api_token欄位。

Step 1:加入api_token欄位
在migration裡加入以下的程式碼:

$table->string('api_token', 60)->unique();
執行migrate就能夠在users表格中加入api_token欄位。

Step 2:將要受保護的路由都加入auth:api路由群組
Route::group(['prefix' => 'api', 'middleware' => 'auth:api'], function () {
// 加在這裡
});
之後所有受auth:api保護的路由都必須在request中加入api_token,並且與資料庫users表格的欄位符合才能通過驗證。

如何產生一個api_token
利用Laravel提供的str_random(60)即可。

如何在請求中附加api_token
在Header部份加入一個Authorization欄位,內容設定成Bearer api_token_here

例如:

Authorization: Bearer HYQtaOnM7nyBY8MPhAIyHpY0I8jOmyJBPHGYPmXllyLy6byFP1kg0BHYqQkI
當然那一段是亂碼,要替換成實際運用的api_token呀~

http://www.dahouduan.com/2017/09/18/laravel55-api-token/

發表於 : 2019-03-14 22:26:08
yehlu
http://www.dahouduan.com/2017/09/18/lar ... api-token/

Laravel5.5 api token 用法
教程 shanhuhai 2年前 (2017-09-18) 20099℃ 0评论
Laravel api token验证使用方法
从 Laravel 5.2 开始, Laravel 的将路由的配置进行了分拆, 在 routes 目录下有 web.php 和 api.php 两个路由的配置。 api.php 中用来放你的api 开放接口, 用作一种无状态的认证机制。

基本上就是通过在 url 的 querystring 中带一个参数 api_token 然后到服务器端用户表中找到此用户。

在Laravel 文档中对这块基本上没有说明。下面来看下实现步骤:

配置步骤
1. 首先要在用户表中添加 api_token 字段
你可以修改Laravel自带的迁移文件

打开 database/migrations/2014_10_12_000000_create_users_table.php
添加 api_token 字段

Schema::create('users', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->string('email')->unique();
$table->string('password');
//添加 api_token 字段
$table->string('api_token', 60)->unique();
$table->rememberToken();
$table->timestamps();
});
然后你可以重置并重新运行migration

php artisan migrate:reset
php artisan migrate
2.设置路由
在 routes/api.php 中设置我们的路由

Route::prefix('v1')->middleware('auth:api')->group(function() {
// 取单条数据
Route::get('notes/{id}',function($id){
return Note::select('title', 'content')->find($id);
});
});

使用 prefix 方法将 group 中的所有路由规则的url都加上 v1(版本号) 前缀,所以实际的请求地址是 :/api/v1/notes/{id}

middleware 使用 auth:api, :api代表使用的 Guard(看门)类, 在 config/auth.php 中可以看到 api Guard 的驱动设置的是 token, 这表示所有使用了 auth:api 中间路由规则,请求中都必须带 api_token 参数

打开 config/auth.php 配置稍微解释下

'defaults' => [
'guard' => 'web',
'passwords' => 'users',
],

这个配置表示 默认的 guard 是web,意思是如果直接使用 meddleware('auth') 其实是 meddleware('auth:web')

'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],

'api' => [
'driver' => 'token',
'provider' => 'users',
],
],

指名了各个guard所使用的驱动,web的话是session,api的话就是 token。

修改 app/User.php
添加 api_token 字段

protected $fillable = [
'name', 'email', 'password','api_token'
];

如何获取用户信息
Auth::guard('api')->user();
转载请注明:大后端 » Laravel5.5 api token 用法