將"tymon/jwt-auth": "1.0.0-beta.1"
添加到 composer.json 中,執行 composer update
php
config/app.php
中在 providers
裏添加 Tymon\JWTAuth\Providers\LaravelServiceProvider::class,
web
config/app.php
中在 aliases
裏添加 'JWTAuth' => Tymon\JWTAuth\Facades\JWTAuth::class
json
修改config/auth.php
,將 api 的 driver 修改成 jwt。以下:api
'guards' => [ 'web' => [ 'driver' => 'session', 'provider' => 'users', ], 'api' => [ 'driver' => 'jwt', 'provider' => 'users', ], ]
在 routes/api.php
中添加如下路由:session
$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'); //關於我 }); });
添加 getJWTIdentifier
和 getJWTCustomClaims
實現 AuthenticatableUserContractapp
<?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']); } }
原文地址
http://moell.cn/article/37composer