在本教程中,我们将了解如何在Laravel应用程序中使用laravel护照身份验证。我们还将使用LaravelPassport身份验证构建一个简单的产品(创建、查询、更新和删除)。Laravel已经提供了传统的登录表单认证,但是如果你想使用API怎么办?API使用令牌对用户进行身份验证,因为它们不使用会话。当用户通过API登录时,会生成一个令牌并发送给用户,可用于身份验证。Laravel提供了Passport来使用API认证,没有任何困难。让我们看看如何在Laravel应用程序中设置和配置LaravelPassport以进行API身份验证和RESTfulAPI。创建一个新的应用程序让我们创建一个新的Laravel应用程序。执行以下命令创建一个全新的Laravel应用程序。composercreate-project--prefer-distlaravel/laravelpassport安装Passport扩展我们使用composer来安装Passport扩展。执行下面的命令来安装这个扩展。composerrequirelaravel/passportLaravel配置PassportLaravelPassport扩展需要一些配置。服务提供者我们使用的是最新版本的Laravel5.6,它可以使用包发现和自动注册服务。如果你使用laravel5.4或更低版本,你需要在config/app.php文件中注册Passport的服务。就是这样,将注册服务添加到这个文件中的providers数组中。'providers'=>[....Laravel\Passport\PassportServiceProvider::class,]迁移和安装在.env文件中设置数据库凭据。LaravelPassport提供了需要我们数据库中护照表的迁移文件。Passport迁移用于存储令牌和客户端信息。运行迁移命令将架构迁移到数据库。phpartisanmigrate接下来,需要使用以下命令安装Passport。它将生成生成秘密访问令牌所需的加密密钥。phpartisanpassport:installPassport配置在此步骤中,我们需要在Laravel应用程序中进行更改以完成Passport配置。app/User.php将LaravelPassportHasApiTokens特性添加到你的用户模型中。它将提供一些辅助方法。'App\Policies\ModelPolicy',];/***注册任何身份验证/授权服务。**@returnvoid*/publicfunctionboot(){$this->registerPolicies();护照::路线();}}config/auth.php在config/auth.php文件中,将驱动程序设置为passport。return[....'guards'=>['web'=>['driver'=>'session','provider'=>'users',],'api'=>['driver'=>'passport','provider'=>'users',],],....]创建路由让我们创建API路由,在routes/api.php中添加路由。Route::post('login','PassportController@login');Route::post('register','PassportController@register');Route::middleware('auth:api')->group(function(){Route::get('user','PassportController@details');Route::resource('products','ProductController');});创建身份验证控制器让我们设置身份验证逻辑。通过运行以下命令创建一个Passport控制器。phpartisanmake:controllerPassportController将以下代码复制到app/Http/Controllers/PassportController.phpvalidate($request,['name'=>'required|min:3','email'=>'required|email|unique:users','password'=>'required|min:6',]);$user=User::create(['name'=>$request->name,'email'=>$request->email,'password'=>bcrypt($request->password)]);$token=$user->createToken('TutsForWeb')->accessToken;returnresponse()->json(['token'=>$token],200);}/***处理登录请求**@paramRequest$request*@return\Illuminate\Http\JsonResponse*/publicfunctionlogin(Request$request){$credentials=['email'=>$request->email,'password'=>$request-复制代码>密码];if(auth()->attempt($credentials)){$token=auth()->user()->createToken('TutsForWeb')->accessToken;returnresponse()->json(['token'=>$token],200);}else{returnresponse()->json(['error'=>'UnAuthorised'],401);}}/***返回经过身份验证的用户详细信息**@return\Illuminate\Http\JsonResponse*/publicfunctiondetails(){returnresponse()->json(['user'=>auth()->user()],200);}}解释一下上面register方法中的代码,我们验证请求数据,然后创建用户。我们使用createToken方法创建令牌并将名称作为参数传递。最后,我们在JSON响应中返回令牌。在登录方法中,我们尝试使用请求参数进行身份验证。然后,根据尝试的成功或失败返回适当的响应。在details方法中,我们只返回用户模型。创建产品CRUD让我们创建一个产品CRUD。运行以下命令生成产品模型、迁移文件和控制器。phpartisanmake:modelProduct-mc它会在database/migrations文件夹中创建一个新的数据库迁移文件create_products_table.php。将up方法更新为以下代码。publicfunctionup(){Schema::create('products',function(Blueprint$table){$table->increments('id');$table->integer('user_id');$table->string('name');$table->integer('price');$table->timestamps();$table->foreign('user_id')->references('id')->on('users');});}现在,将fillable属性添加到Product模型。打开app文件夹下的Product.php文件。移民。phpartisanmigrate现在,让我们在app/User.php文件中添加关系方法。publicfunctionproducts(){return$this->hasMany(Product::class);}打开app/Http/Controllers文件夹中的ProductController.php文件。将下面的代码复制到产品控制器中。user()->products;}returnresponse()->json(['success'=>true,'data'=>$products]);}publicfunctionshow($id){$product=auth()->user()->products()->find($id);if(!$product){returnresponse()->json(['success'=>false,'message'=>'Productwithid'.$id.'notfound'],400);}returnresponse()->json(['success'=>true,'data'=>$product->toArray()],400);}publicfunctionstore(Request$request){$this->validate($request,['name'=>'required','price'=>'required|integer']);$产品=新产品();$product->name=$request->name;$product->price=$request->price;if(auth()->user()->products()->save($product))returnresponse()->json(['success'=>true,'data'=>$product->toArray()]);elsereturnresponse()->json(['success'=>false,'message'=>'无法添加产品'],500);}publicfunctionupdate(Request$request,$id){$product=auth()->user()->products()->find($id);if(!$product){returnresponse()->json(['success'=>false,'message'=>'Productwithid'.$id.'notfound'],400);$updated=$product->fill($request->all())->save();如果($updated)返回response()->json(['成功'=>真]);elsereturnresponse()->json(['success'=>false,'message'=>'Productcouldnotbeupdated'],500);}publicfunctiondestroy($id){$product=auth()->user()->products()->find($id);if(!$product){returnresponse()->json(['success'=>false,'message'=>'Productwithid'.$id.'notfound'],400);}if($product->delete()){returnresponse()->json(['success'=>true]);}else{returnresponse()->json(['success'=>false,'message'=>'Productcouldnotbedeleted'],500);}}}测试现在我们的逻辑已经完成,让我们开始测试吧我们将在PHP开发服务器上进行测试,但如果需要,您可以使用虚拟主机。运行以下命令以在PHP开发服务器上为应用程序提供服务。phpartisanserve现在让我们使用测试工具Postman来测试我们的API。注册接口登录接口Details接口在测试Details接口或者任何需要用户认证的API时,需要指定两个headers请求头信息。您必须在授权请求标头中将令牌指定为不记名令牌。基本上,您必须在Bearer之后拼写登录和注册后收到的令牌,中间有一个空格。'headers'=>['Accept'=>'application/json','Authorization'=>'Bearer'。$accessToken,]商品列表界面商品添加界面商品展示界面商品更新界面商品删除界面本教程完整代码您可以从github获取GitHub文章:https://learnku.com/laravel/t...更多文章:https//learnku.com/laravel/c...
