资讯专栏INFORMATION COLUMN

使用 laravel Passport 做 API 认证

whinc / 1525人阅读

摘要:使用进行测试注册接口,注册成功后返回与用户名登录接口详情接口参考了简书浪来了的认证应用实战

安装larave

laravel new passport_demo
cd passport_demo && composer install

将 .env 中数据库配置修改为自己的数据库配置

 DB_DATABASE=homestead
 DB_USERNAME=homestead
 DB_PASSWORD=secret

安装Passport

composer require laravel/passport
php artisan migrate
php artisan passport:install

执行php artisan migrate时可能出现以下错误

IlluminateDatabaseQueryException  : SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 767 bytes (SQL: alter table `users` add unique `users_email_unique`(`email`))

编辑app/Providers/AppServiceProvider.php

 namespace AppProviders;
 use IlluminateSupportServiceProvider;
 use IlluminateSupportFacadesSchema;//新增
 class AppServiceProvider extends ServiceProvider{
     public function boot(){
         Schema::defaultStringLength(191);//新增
     }
     public function register(){}
 }

然后再执行这两条命令即可

php artisan migrate
php artisan passport:install

编辑AppUserLaravelPassportHasApiTokens添加到AppUser

 namespace App;
 use IlluminateNotificationsNotifiable;
 use IlluminateFoundationAuthUser as Authenticatable;
 use LaravelPassportHasApiTokens;//新增
 class User extends Authenticatable{
     use Notifiable;
     use HasApiTokens;//新增
     protected $fillable = ["name", "email", "password",];
     protected $hidden = ["password", "remember_token",];
 }

app/Providers/AuthServiceProvider.phpboot方法中调用Passport::routes函数

 namespace AppProviders;
 use IlluminateSupportFacadesGate;
 use IlluminateFoundationSupportProvidersAuthServiceProvider as ServiceProvider;
 use LaravelPassportPassport;//新增
 class AuthServiceProvider extends ServiceProvider{
     protected $policies = ["AppModel" => "AppPoliciesModelPolicy",];
     public function boot(){
         $this->registerPolicies();
         Passport::routes();//新增
     }
 }

将配置文件config/auth.php中授权看守器guardsapidriver选项改为passport

//修改前
 "guards" => [
     "web" => [
         "driver" => "session",
         "provider" => "users",
     ],
     "api" => [
         "driver" => "token",
         "provider" => "users",
     ],
 ],
// 修改后
 "guards" => [
     "web" => [
         "driver" => "session",
         "provider" => "users",
     ],
     "api" => [
         "driver" => "passport",
         "provider" => "users",
     ],
 ],

创建文件app/Http/Controllers/UserController.php,这里的代码来自另一个教程。

 namespace AppHttpControllers;
 use IlluminateHttpRequest;
 use AppHttpControllersController;
 use AppUser;
 use IlluminateSupportFacadesAuth;
 use Validator;
 class UserController extends Controller {
     public $successStatus = 200;
     public function login() {
         if(Auth::attempt(["email" => request("email"), "password" => request("password")])) {
             $user = Auth::user();
             $success["token"] =  $user->createToken("MyApp")->accessToken;
             return response()->json(["success" => $success], $this->successStatus);
         }
         else{
             return response()->json(["error"=>"Unauthorised"], 401);
         }
     }
     public function register(Request $request) {
         $validator = Validator::make($request->all(), [
             "name" => "required",
             "email" => "required|email",
             "password" => "required",
             "c_password" => "required|same:password",
         ]);
         if ($validator->fails()) {
             return response()->json(["error"=>$validator->errors()], 401);
         }
         $input = $request->all();
         $input["password"] = bcrypt($input["password"]);
         $user = User::create($input);
         $success["token"] =  $user->createToken("MyApp")->accessToken;
         $success["name"] =  $user->name;
         return response()->json(["success"=>$success], $this->successStatus);
     }
     public function details() {
         $user = Auth::user();
         return response()->json(["success" => $user], $this->successStatus);
     }
 }

使用postman进行测试
注册接口,注册成功后返回token与用户名

登录接口

详情接口

参考了简书 浪来了2016 的Laravel5.4 Oauth2.0认证应用 API 实战!

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/29048.html

相关文章

  • 使用 Laravel Passport 为你的 REST API 增加用户认证功能

    摘要:在本教程中,我们将了解如何在应用中使用认证。当用户通过登录时,会生成令牌并将其发送给用户,该用户可用于身份验证。提供,可以毫无困难地使用认证。服务提供者我们使用的最新版本,它可以使用包发现并自动注册服务。 showImg(https://segmentfault.com/img/remote/1460000019095408?w=1000&h=526); 在本教程中,我们将了解如何在 ...

    mudiyouyou 评论0 收藏0
  • Laravel Passport API 认证使用小结

    摘要:看到社区常有人问用于密码验证方式来获取的问题,刚好我最近一个项目使用,也是使用的密码授权来做验证,对于如何做登录登出,以及多账号系统的认证等常用场景做一下简单的使用小总结。 看到Laravel-China社区常有人问Laravel Passport用于密码验证方式来获取Token的问题,刚好我最近一个API项目使用Laravel Dingo Api+Passport,也是使用Oauth...

    Panda 评论0 收藏0
  • laravel/passport实现API认证Laravel5.6)

    摘要:第一部分安装第一步使用安装第二步服务提供器使用框架注册自己的数据库迁移目录,因此在注册提供器后,就应该运行的迁移命令来自动创建存储客户端和令牌的数据表第三步接下来,运行命令来创建生成安全访问令牌时所需的加密密钥,同时,这条命令也会创建用于生 第一部分 安装Passport(laravel/passport) 第一步. 使用 Composer 安装 Passport :composer...

    huayeluoliuhen 评论0 收藏0
  • Laravel使用Passport来创建API用户认证

    摘要:本文来自原文链接欢迎作客我们的学习群比如说你要给你的手机用户创建,使用的是你已有的系统里的数据库,尤其是用户数据。 本文来自pilishen.com----原文链接; 欢迎作客我们的php&Laravel学习群:109256050 比如说你要给你的手机APP用户创建API,使用的是你已有的Laravel系统里的数据库,尤其是用户数据。现在我们来看一下,这里使用的是Laravel Pas...

    TwIStOy 评论0 收藏0
  • PHP / Laravel API 开发推荐阅读清单

    showImg(https://segmentfault.com/img/bV6aHV?w=1280&h=800); 社区优秀文章 Laravel 5.5+passport 放弃 dingo 开发 API 实战,让 API 开发更省心 - 自造车轮。 API 文档神器 Swagger 介绍及在 PHP 项目中使用 - API 文档撰写方案 推荐 Laravel API 项目必须使用的 8 个...

    shmily 评论0 收藏0

发表评论

0条评论

whinc

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<