Laravel API Token

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

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章