欢迎各位兄弟 发布技术文章
这里的技术是共享的
将"tymon/jwt-auth": "1.0.0-beta.1" 添加到 composer.json 中,执行 composer update
config/app.php 中在 providers 里添加 Tymon\JWTAuth\Providers\LaravelServiceProvider::class,
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'); //关于我});});添加 getJWTIdentifier 和 getJWTCustomClaims 实现 AuthenticatableUserContract
<?phpnamespace 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 [];}}<?phpnamespace 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']);}}来自 https://www.moell.cn/article/37