分享Laravel Passport 踩坑日记

发布时间 - 2020-09-07 00:00:00    点击率:

下面由Laravel教程栏目给大家分享Laravel Passport 踩坑日记,希望对需要的朋友有所帮助!

以前的项目大多使用 dingoapi + jwt-auth 实现的 api 认证,laravel 虽然在很早就出了 passport ,但一直没有怎么关注。
今天撸了一把 passport ,虽然遇到不少坑,但是赶脚这个东西还是蛮好用的~

坑1:我暂时只想通过账号密码获取 token

Passport 一出生就自带了很多的路由。。 but,这些东东大部分对我是真的没用啊
解决方案:
在你的 AuthServiceProvider  里重新定义:

Passport::routes(function (RouteRegistrar $router) {
            $router->forAccessTokens();
        }, ['prefix' => 'api']);

坑2: 注册账号时,如何手动生成 Token ?

jwt-auth 的 JWTAuth::fromUser($user); 可以很简单的生成token,但是在 Passport 里似乎没有现成的方法。
解决方案:
注册完账号后,再一次主动请求 oauth/token

public function register(Request $request)
    {
        $validator = $this->validator($request->all());

        if ($validator->fails()){
            return response()->json($validator->errors());
        }

        event(new Registered($user = $this->create($request->all())));

        $client = \DB::table('oauth_clients')->where('password_client', 1)->first();

        $request->request->add([
            'username' => $user->email,
            'password' => $request->password,
            'grant_type' => 'password',
            'client_id' => $client->id,
            'client_secret' => $client->secret,
            'scope' => '*'
        ]);

        $proxy = Request::create(
            'oauth/token',
            'POST'
        );

        return Route::dispatch($proxy);
    }

执行,获得返回

{
  "token_type": "Bearer",
  "expires_in": 1296000,
  "access_token": "xxx",
  "refresh_token": "xxx"
}

完美解决。

坑3:我想要使用手机号登录

Passport 其实已经提供了动态修改用户登录的接口,只不过没有在文档里写出来
解决方案:
在你的 User Model 里增加如下方法

public function findForPassport($login) {
        return User::orWhere('email', $login)->orWhere('mobile', $login)->first();
    }

坑4: 当使用错误的 token 时, passport 总会跳转到 login 方法

查看源码发现 passport 用的是 web auth 中间件,难怪如此
在你的请求头里增加 Accept:application/json ,问题解决
例如:


# laravel  # 的是  # 我是  # 出了  # 给大家  # 很简单  # 只想  # 总会  # 一出  # 带了  # 一直没有 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: HTML5段落标签p和br怎么选_文本排版常用标签对比【解答】  如何用腾讯建站主机快速创建免费网站?  如何在腾讯云免费申请建站?  如何自己制作一个网站链接,如何制作一个企业网站,建设网站的基本步骤有哪些?  如何在IIS服务器上快速部署高效网站?  LinuxShell函数封装方法_脚本复用设计思路【教程】  Laravel如何使用Service Provider服务提供者_Laravel依赖注入与容器绑定【深度】  Laravel如何实现本地化和多语言支持?(i18n教程)  Laravel如何创建和注册中间件_Laravel中间件编写与应用流程  Laravel模型事件有哪些_Laravel Model Event生命周期详解  Laravel怎么集成Vue.js_Laravel Mix配置Vue开发环境  Claude怎样写约束型提示词_Claude约束提示词写法【教程】  Laravel如何从数据库删除数据_Laravel destroy和delete方法区别  Laravel Seeder怎么填充数据_Laravel数据库填充器的使用方法与技巧  桂林网站制作公司有哪些,桂林马拉松怎么报名?  如何在Windows服务器上快速搭建网站?  Laravel如何处理文件上传_Laravel Storage门面实现文件存储与管理  Python并发异常传播_错误处理解析【教程】  如何在建站之星网店版论坛获取技术支持?  浏览器如何快速切换搜索引擎_在地址栏使用不同搜索引擎【搜索】  油猴 教程,油猴搜脚本为什么会网页无法显示?  Win10如何卸载预装Edge扩展_Win10卸载Edge扩展教程【方法】  如何基于云服务器快速搭建网站及云盘系统?  如何正确选择百度移动适配建站域名?  Laravel如何实现用户注册和登录?(Auth脚手架指南)  如何用已有域名快速搭建网站?  java中使用zxing批量生成二维码立牌  IOS倒计时设置UIButton标题title的抖动问题  js代码实现下拉菜单【推荐】  如何快速生成专业多端适配建站电话?  javascript中的数组方法有哪些_如何利用数组方法简化数据处理  如何登录建站主机?访问步骤全解析  利用vue写todolist单页应用  如何在Ubuntu系统下快速搭建WordPress个人网站?  如何在局域网内绑定自建网站域名?  b2c电商网站制作流程,b2c水平综合的电商平台?  Laravel如何使用Service Container和依赖注入?(代码示例)  Python数据仓库与ETL构建实战_Airflow调度流程详解  php在windows下怎么调试_phpwindows环境调试操作说明【操作】  Laravel怎么在Blade中安全地输出原始HTML内容  如何快速生成橙子建站落地页链接?  HTML5空格在Angular项目里怎么处理_Angular中空格的渲染问题【详解】  Laravel怎么设置路由分组Prefix_Laravel多级路由嵌套与命名空间隔离【步骤】  高性能网站服务器部署指南:稳定运行与安全配置优化方案  如何快速搭建安全的FTP站点?  浅析上传头像示例及其注意事项  node.js报错:Cannot find module 'ejs'的解决办法  Swift中swift中的switch 语句  如何制作一个表白网站视频,关于勇敢表白的小标题?  Android中AutoCompleteTextView自动提示