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 就可以了