安装将"tymon/jwt-auth": "1.0.0-beta.1" 添加到 composer.json 中,执行 composer update
Providers config/app.php 中在 providers 里添加 Tymon\JWTAuth\Providers\LaravelServiceProvider::class,
Class Aliases config/app.php 中在 aliases 里添加 'JWTAuth' => Tymon\JWTAuth\Facades\JWTAuth::class
修改认证驱动修改config/auth.php ,将 api 的 driver 修改为 jwt。如下:
'guards' => [ 'web' => [ 'driver' => 'session', 'provider' => 'users', ],
'api' => [ 'driver' => 'jwt', 'provider' => 'users', ], ]
添加路由在 routes/api.php 中添加以下路由:
$api = app('Dingo\Api\Routing\Router');
$api->version('v1', ['namespace' => 'App\Http\Controllers\Api\V1'], function($api) { $api->post('token', 'UserController@token'); //获取token $api->post('refresh-token', 'UserController@refershToken'); //刷新token
$api->group(['middleware' => ['auth:api']], function($api) { $api->post('logout', 'UserController@logout'); //登出 $api->get('me', 'UserController@me'); //关于我 });
});
App\User.php添加 getJWTIdentifier 和 getJWTCustomClaims 实现 AuthenticatableUserContract
<?php
namespace App\Models;
use Illuminate\Notifications\Notifiable; use Illuminate\Foundation\Auth\User as Authenticatable; use Tymon\JWTAuth\Contracts\JWTSubject as AuthenticatableUserContract;
class User extends Authenticatable implements AuthenticatableUserContract {
/** * The attributes that should be hidden for arrays. * * @var array */ protected $hidden = [ 'password', 'remember_token', ];
/** * @return mixed */ public function getJWTIdentifier() { return $this->getKey(); // Eloquent model method }
/** * @return array */ public function getJWTCustomClaims() { return []; }
}
实现路由所需要的控制器<?php
namespace App\Http\Controllers\Api\V1;
use App\Http\Controllers\Api\V1\Controller; use App\Models\User; use Illuminate\Http\Request; use Tymon\JWTAuth\Exceptions\JWTException; use Auth;
class UserController extends Controller {
protected $guard = 'api';
/** * 获取token * * @param Request $request * @return \Illuminate\Http\JsonResponse */ public function token(Request $request) { $credentials=[ 'email' => $request->email, 'password' => $request->password, 'status' => 0, ];
try { if (! $token = Auth::guard($this->guard)->attempt($credentials)) { return response()->json(['error' => 'invalid_credentials'], 401); } } catch (JWTException $e) { return response()->json(['error' => 'could_not_create_token'], 500); }
return response()->json(compact('token')); }
/** * @return mixed */ public function refershToken() { $token = Auth::guard($this->guard)->refresh();
return $this->response->array(compact('token')); }
/** * 个人信息 * * @return User|null */ public function me() { return Auth::guard('api')->user(); }
/** * 退出 * * @return \Illuminate\Http\JsonResponse */ public function logout() { Auth::guard($this->guard)->logout(); return response()->json(['status' => 'ok']); } }
|