laravel--[ tymon/jwt-auth ] && 中间件
php artisan vendor:publish --provider="Tymon\JWTAuth\Providers\LaravelServiceProvider" php artisan jwt:secret CREATE TABLE `admin` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, `email` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, `password` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, `remember_token` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL, `created_at` timestamp NULL DEFAULT NULL, `updated_at` timestamp NULL DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `users_email_unique` (`email`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; 生成admin model php artisan infyom:model Admin 然后修改这个model use Tymon\JWTAuth\Contracts\JWTSubject; use Illuminate\Notifications\Notifiable; use Illuminate\Foundation\Auth\User as Authenticatable; class Admin extends Authenticatable implements JWTSubject{ } //具体代码参考jwt-auth官方
02) 配置 config/auth.php
'defaults' => [ 'guard' => 'web', 'passwords' => 'users', ], 'guards' => [ 'web' => [ //web端登录验证, auth('参数')->attempt() 不指定参数,默认使用web 'driver' => 'session', 'provider' => 'users', ], 'admin' => [ //后面接口登录验证会用到 'driver' => 'jwt', 'provider' => 'feis', ], ], 'providers' => [ 'users' => [ 'driver' => 'eloquent', 'model' => App\User::class, ], 'feis' => [ 'driver' => 'eloquent', 'model' => App\Models\Admin::class ], ], 'passwords' => [ 'users' => [ 'provider' => 'users', 'table' => 'password_resets', 'expire' => 60, ], ],
03) 修改 routes/api.php
Route::group([ // 'middleware' => 'api', 'middleware' => 'auth:admin', //这里配置后在controller 中不在配置 'prefix' => "auth" ], function () { Route::get('login', 'AuthController@login'); // Route::get('login', function () { //http://demo.laravel.com/api/auth/login // return 'API: hello world'; // }); // Route::post('logout', 'AuthController@logout'); // Route::post('refresh', 'AuthController@refresh'); Route::get('me', 'AuthController@me'); });
04) 创建 AuthController
<?php namespace App\Http\Controllers\Api; use App\Http\Controllers\Controller; class AuthController extends Controller { public function __construct() { //api.php 中使用了middleware,这里就不在使用 $this->middleware('auth:admin', ['except' => ['login']]); } public function login() { // atuh() 中的参数默认使用auth.php 'guards' => ['web' => ['driver' => 'session', 'provider' => 'users']] // $webIsLogin = auth('web')->attempt(['email' => "dafei02@qq.com", 'password' => '123456']); $webIsLogin = auth()->attempt(['email' => "dafei02@qq.com", 'password' => '123456']); $adminToken = auth('admin')->attempt(['email' => 'dafei_01@qq.com', 'password' => '123456']); dd($webIsLogin,$adminToken); } public function me() { exit('me'); } }
输出结果.如图