我是小白,今天寫這篇文章主要是給新手學(xué)習(xí)看的,大佬就不用看了,有很多不足望大家指出,共同進(jìn)步。
在開發(fā)中許多 API 通常在返回響應(yīng)之前都需要某種形式的認(rèn)證,有些時候,一個認(rèn)證的請求和一個未認(rèn)證的請求,響應(yīng)可能不同。
在web項目中,實現(xiàn)認(rèn)證比較輕松,那么前后端分離的項目中,我們要怎么實現(xiàn)認(rèn)證,今天這篇文章就以 API token 認(rèn)證機(jī)制,使用Token可以解決laravel API的無狀態(tài)認(rèn)證。
一、給用戶表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']); //新增加的
});
}
}
二、然后使用下面的命令將字段添加到表中:
三、用戶注冊:
在注冊的控制器文件的創(chuàng)建用戶中添加 api_token
字段:
我這里的控制器是App\Http\Controllers\Api\R
egisterController.php
protected function register(Request $request)
{
$input = $request->all(); //獲取傳過來的傳數(shù)
//在這里設(shè)置生成token后,與賬號密碼等信息一起存進(jìn)User表
$user = User::create($data); //存進(jìn)數(shù)據(jù)庫
return $token;
//這里面的邏輯自己寫 我這里只是簡單實現(xiàn)
}
最后,不要忘記在 App\User.php
用戶模型表中的 $fillable
屬性當(dāng)中添加api_token
字段:
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'name', 'email', 'password','confirmation_token','api_token'
];
四、修改api driver:
接下來要在config\auth.php 修改如下內(nèi)容:
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
'api' => [
'driver' => 'token', //把driver設(shè)置為token
'provider' => 'users',
],
],
五、如何使用:
接下來,我們要添加路由,在routes\api.php文件修改:
Route::group(['middleware' => 'token'], function(){
Route::post('register', 'API\UserController@register');
});
怎么訪問?我們這里用postman來測試:
到些就大功告成了! 注意,這個只是基礎(chǔ)認(rèn)證,現(xiàn)在開發(fā)還是用別人已經(jīng)開發(fā)好的插件好,比如oAuth2,basic,jwt,Passport等等。
哦對了,如果想看token的認(rèn)證原理,我們可以看他的底層源碼
vendor\laravel\framework\src\Illuminate\Auth\TokenGuard.php:
這個我也看不明白,哈!再見!
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
您可能感興趣的文章:- Laravel如何實現(xiàn)適合Api的異常處理響應(yīng)格式
- Laravel5.5+ 使用API Resources快速輸出自定義JSON方法詳解
- laravel接管Dingo-api和默認(rèn)的錯誤處理方式
- 在Laravel中使用GuzzleHttp調(diào)用第三方服務(wù)的API接口代碼
- Laravel實現(xiàn)ApiToken認(rèn)證請求
- laravel框架 api自定義全局異常處理方法
- laravel dingo API返回自定義錯誤信息的實例
- laravel 配置路由 api和web定義的路由的區(qū)別詳解
- 詳解Laravel制作API接口