Laravel API 默認驅動爲 token,可查看config/auth.php。
'api' => [
'driver' => 'token',
'provider' => 'users',
],
我們來看看如何在項目中使用吧
1. 先給數據庫中加一個字段:
1.1 項目下執行命令 php artisan make:migration update_users_table_add_api_token --table=users
生成遷移文件.
1.2 然後修改遷移文件
Schema::table('users', function (Blueprint $table) {
$table->string('api_token', 64)->after('password')
->unique()
->nullable()
->default(null);
});
1.3 然後修改模型
添加 api_token
到 User
模型 $fillable
屬性
protected $fillable = [
'name', 'email', 'password','api_token',
];
2. 用戶註冊時生成api_token
代碼放在註冊控制器 app/Http/Controllers/Auth/RegisterController.php
裏面。
protected function create(array $data)
{
return User::create([
'name' => $data['name'],
'email' => $data['email'],
'password' => bcrypt($data['password']),
'api_token' =>Str::random(60) //use Illuminate\Support\Str;
]);
}
這時,如果註冊用戶,會自動生成api_token。
3. 使用
我這裏的使用是前後端未分離,但也單獨設置了api的路由。不喜勿噴~
如果在routes/api.php 中配置的路由加上 中間件 'middleware' => 'auth:api' ,發現接口調用時都過不了。設置方式如下:
先在app.blade.php 中加入
<script>
window.Laravel = {!! json_encode([
'csrfToken' => csrf_token(),
]) !!};
Laravel.apiToken = "{{ Auth::check() ? 'Bearer '.Auth::user()->api_token : 'Bearer ' }}";
</script>
然後再對應頁面中ajax請求處對應的headers中加入 'Authorization':Laravel.apiToken
這樣訪問就可以了,如果是前後端分離的,也是在對應請求的header中加上 'Authorization': apiToken 就可以了