当前位置: 首页 > 后端技术 > PHP

使用LaravelPassport处理API认证

时间:2023-03-29 19:51:15 PHP

文章转发自专业的Laravel开发者社区,原文链接:https://learnku.com/laravel/t...我们将学习使用Laravel的PassportAPIOAuth来创建一个认证系统。Step1.安装Laravel我们需要使用以下命令创建一个最新的Laravel应用,请打开终端执行:laravelnewauthStep2.安装LaravelPassport包LaravelPassport可以在几分钟内为您的应用实现一个完整的应用OAuth2服务器。composerrequirelaravel/passport步骤3.运行数据库迁移Passport的迁移将创建您的应用程序用于存储客户端和访问令牌的表。phpartisanmigrate第4步。生成密钥此命令将创建密钥以生成安全访问令牌。此外,它还将创建用于生成访问令牌的个人访问权限和密码授权:执行phpartisanpassport:install后,将Laravel\Passport\HasApiTokenstrait添加到您的App\User模型中。该特征会在模型中添加一系列辅助函数来验证用户的密钥和作用域:Step5.Passport配置'App\Policies\ModelPolicy',];/***注册任何身份验证/授权服务。**@returnvoid*/publicfunctionboot(){$this->registerPolicies();护照::路线();}}最后,在config/auth.php配置文件中,将api权限认证守卫的driver选项设置为passport。当传入的API请求需要身份验证时,告诉您的应用程序使用Passport的TokenGuard。'guards'=>['web'=>['driver'=>'session','provider'=>'users',],'api'=>['driver'=>'passport','provider'=>'users',],],Step6.添加API路由Laravel提供routes/api.php文件为我们编写web路由,所以在这个文件中添加新的路由。'auth'],function(){Route::post('login','AuthController@login');Route::post('signup','AuthController@signup');Route::group(['middleware'=>'auth:api'],function(){Route::get('logout','AuthController@logout');路线::get('用户','AuthController@user');});});第7步:创建控制器最后一步我们必须创建新的控制器和api方法。因此我们首先创建AuthController并并把代码写进去:validate(['name'=>'required|string','email'=>'required|string|email|unique:users','password'=>'required|string|confirmed']);$user=newUser(['name'=>$request->name,'email'=>$request->email,'password'=>bcrypt($request->password)]);$用户->保存();returnresponse()->json(['消息'=>'S成功创建用户!],201);}/***登录用户并创建令牌**@param[string]电子邮件*@param[string]密码*@param[boolean]remember_me*@return[string]access_token*@return[string]token_type*@return[string]expires_at*/publicfunctionlogin(Request$request){$request->validate(['email'=>'required|string|email','password'=>'required|string','remember_me'=>'布尔值']);$credentials=request(['email','password']);if(!Auth::attempt($credentials))returnresponse()->json(['message'=>'Unauthorized'],401);$user=$request->user();$tokenResult=$user->createToken('个人访问令牌');$token=$tokenResult->token;如果($request->remember_me)$token->expires_at=Carbon::now()->addWeeks(1);$令牌->保存();returnresponse()->json(['access_token'=>$tokenResult->accessToken,'token_type'=>'Bearer','expires_at'=>Carbon::parse($tokenResult->token->expires_at)->toDateTimeString()]);}/***注销用户(撤销令牌)**@return[string]消息*/publicfunctionlogout(Request$request){$request->user()->token()->revoke();returnresponse()->json(['message'=>'成功注销']);}/***获取经过身份验证的用户**@return[json]用户对象*/publicfunctionuser(Request$request){returnresponse()->json($request->user());现在我们已经准备好运行我们的示例,运行以下命令快速运行:phpartisanservetest现在,我们可以使用REST客户端工具简化测试的工具,例如Postman我执行测试你可以看到下面的截图。您需要为此API设置以下两个标头:Content-Type:application/jsonX-Requested-With:XMLHttpRequestRegisterLoginLogoutUser感谢阅读!资源GitHubPostman集合参考LaravelPassportCreateRESTAPIinLaravelwithauthenticationusingPassportbyUrjitRajgor