本文来自pilishen.com----原文链接;欢迎加入我们的php&Laravel学习群:109256050本示例将指导您在laravel中使用JWT创建用户登录和注册API。JWT是JsonWebToken的缩写,可以帮助我们创建用户认证来连接前后端。(1)安装tymon/jwt-auth组件composerrequiretymon/jwt-auth修改config/app.php'providers'=>[....'Tymon\JWTAuth\Providers\JWTAuthServiceProvider',],'aliases'=>[....'JWTAuth'=>'Tymon\JWTAuth\Facades\JWTAuth'],发布JWT配置文件修改token过期时间等:phpartisanvendor:publish--provider="Tymon\JWTAuth\Providers\JWTAuthServiceProvider”生成jwtkey:phpartisanjwt:generate(2)在app/Http/routes.php中创建一个api路由(例子中使用的是laravel5.2,也可以放到更高版本的api.php中)路由::group(['middleware'=>['api','cors'],'prefix'=>'api'],function(){Route::post('register','APIController@register');路由::post('login','APIController@login');Route::group(['middleware'=>'jwt-auth'],function(){Route::post('get_user_details','APIController@get_user_details');});});(3)在CORS中间件这里创建cors中间件,用于解决默认拦截跨域请求的问题。如果不添加,会出现以下常见错误:Cross-OriginRequestBlocked:TheSameOriginPolicydisallowsreadingtheremoteresourceat//test.com/api/register。(原因:CORSheader'Access-Control-Allow-Origin'missing)所以:phpartisanmake:middlewareCORS然后在app/Http/Middleware/CORS.php中:namespaceApp\Http\Middleware;useClosure;classCORS{publicfunctionhandle($request,Closure$next){header('Access-Control-Allow-Origin:*');$headers=['Access-Control-Allow-Methods'=>'POST,GET,OPTIONS,PUT,DELETE','Access-Control-Allow-Headers'=>'Content-Type,X-Auth-Token,Origin'];if($request->getMethod()=="OPTIONS"){返回Response::make('OK',200,$headers);}$response=$next($request);foreach($headersas$key=>$value)$response->header($key,$value);返回$响应;}}注册中间件app/Http/Kernel.php:namespaceApp\Http;useIlluminate\Foundation\Http\KernelasHttpKernel;classKernelextendsHttpKernel{......protected$routeMiddleware=[...'cors'=>\App\Http\Middleware\CORS::class,];}(四)创建jwt-authMiddlewarephpartisanmake:middlewareauthJWT然后app/Http/Middleware/authJWT.phpnamespaceApp\Http\Middleware;use闭包;使用JWTAuth;使用异常;classauthJWT{publicfunctionhandle($request,Closure$next){try{$user=JWTAuth::toUser($request->input('token'));}catch(Exception$e){if($einstanceof\Tymon\JWTAuth\Exceptions\TokenInvalidException){returnresponse()->json(['error'=>'TokenisInvalid']);}elseif($einstanceof\Tymon\JWTAuth\Exceptions\TokenExpiredException){returnresponse()->json(['error'=>'TokenisExpired']);}else{returnresponse()->json(['error'=>'出错了']);}}返回$next($request);}}然后app/Http/Kernel.phpnamespaceApp\Http;useIlluminate\Foundation\Http\KernelasHttpKernel;classKernelextendsHttpKernel{......protected$routeMiddleware=[...'jwt-auth'=>\App\Http\Middleware\authJWT::class,];}(五)创建相关的Controller在app/Http/Controllers/APIController.php中:namespaceApp\Http\Controllers;useIlluminate\Http\Request;useApp\User;useHash;useJWTAuth;classAPIControllerextendsController{publicfunctionregister(Request$request){$input=$request->all();$input['password']=Hash::make($input['password']);用户::创建($输入);returnresponse()->json(['result'=>true]);}publicfunctionlogin(Request$request){$input=$request->all();if(!$token=JWTAuth::attempt($input)){returnresponse()->json(['result'=>'错误的电子邮件或密码。']);}returnresponse()->json(['result'=>$token]);}公共函数get_user_details(请求$request){$input=$request->all();$user=JWTAuth::toUser($input['token']);returnresponse()->json(['result'=>$user]);}}(6)前端测试API这里可以使用postman或者restclient等其他工具来测试RegisterAPI:$.ajax({url:"//learnl52.hd/api/register",dataType:"json”,类型:“POST”,数据:{“名称”:“高清”,“电子邮件”:“test@gmail.com”,“密码”:“123456”},成功:功能(数据){警报("用户创建成功")}});测试登录API:$.ajax({url:"//learnl52.hd/api/login",dataType:"json",type:"POST",data:{"email":"test@gmail.com",“密码”:“123456”},成功:函数(数据){警报(数据.结果)}});测试UserDetailsAPI(这里的token是你的Loginapi返回的token)$.ajax({url:"//learnl52.hd/api/get_user_details",dataType:"json",type:"POST",data:{"token":yourtokenhere},success:function(data){console.日志(数据)}});
