1. 程式人生 > >Laravel5.4 簡單實現app介面 Api Token認證

Laravel5.4 簡單實現app介面 Api Token認證

我是小白,今天寫這篇文章主要是給新手學習看的,大佬就不用看了,有很多不足望大家指出,共同進步。

在開發中許多 API 通常在返回響應之前都需要某種形式的認證,有些時候,一個認證的請求和一個未認證的請求,響應可能不同。

在web專案中,實現認證比較輕鬆,那麼前後端分離的專案中,我們要怎麼實現認證,今天這篇文章就以 API token 認證機制,使用Token可以解決laravel API的無狀態認證。

   一、給使用者表users增加api_token欄位

php artisan make:migration add_api_token_to_users
 首先,給使用者表中增加 api_token欄位,
在生成的遷移檔案中新增欄位:
<?php

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class AddApiTokenToUsers extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::table('users', function (Blueprint $table) {
            $table->string('api_token', 64)->unique();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::table('users', function (Blueprint $table) {
            $table->dropColumn(['api_token']);  //新增加的
        });
    }
}

二、然後使用下面的命令將欄位新增到表中:

php artisan migrate

三、使用者註冊:

在註冊的控制器檔案的建立使用者中新增 api_token 欄位:
我這裡的控制器是App\Http\Controllers\Api\RegisterController.php


protected function register(Request $request)
    {
        $input = $request->all(); //獲取傳過來的傳數 

   //在這裡設定生成token後,與賬號密碼等資訊一起存進User表

     $user = User::create($data); //存進資料庫
   return $token;    
   //這裡面的邏輯自己寫 我這裡只是簡單實現
}



最後,不要忘記在 App\User.php使用者模型表中的 $fillable 屬性當中新增api_token欄位:
/**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'name', 'email', 'password','confirmation_token','api_token'
    ];


四、修改api driver:

接下來要在config\auth.php 修改如下內容:
'guards' => [
        'web' => [
            'driver' => 'session',
            'provider' => 'users',
        ],

        'api' => [
            'driver' => 'token',  //把driver設定為token
            'provider' => 'users',
        ],
    ],
五、如何使用:

接下來,我們要新增路由,routes\api.php檔案修改:

Route::group(['middleware' => 'token'], function(){
  Route::post('register', 'API\UserController@register'); 
});


怎麼訪問?我們這裡用postman來測試: 到些就大功告成了! 注意,這個只是基礎認證,現在開發還是用別人已經開發好的外掛好,比如oAuth2, basic,jwt,Passport等等。 哦對了,如果想看token的認證原理,我們可以看他的底層原始碼
vendor\laravel\framework\src\Illuminate\Auth\TokenGuard.php:
這個我也看不明白,哈!再見!