yansongda/laravel-api 问题修复 & 功能扩展

解决BUG、新增功能、兼容多环境部署,快速响应你的开发需求

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

yansongda/laravel-api

Composer 安装命令:

composer require yansongda/laravel-api

包简介

基于 access_token 的多用户 API 认证系统

README 文档

README

Scrutinizer Code Quality Build Status Latest Stable Version Latest Unstable Version License

当看到 Laravel-API 时,您可能在想:「不是有官方的 Passport 吗,干嘛又重复造轮子?」是的,对于中大型,且需要有 OAuth 授权的应用来说, Passport 的确是一个很好的选择。

但是,对于我们经常开发的中小型应用呢?我们大部分时候可能只是需要提供一个对外服务的 API 接口而已,像是类似于微信开发、支付宝开发那样,给一组 APPID/appsecret 就开始提供纯粹的 API 服务,所以像 Passport 这样的重量级选手,可能就不是更好的选择了。

您可能又会说:「我可以使用 Passport 的 密码授权令牌 啊!」是的,您可以使用,但是,看到 client_id/client_secret/username/password 您作何感想?

您可能又又会说:「我可以使用 Passport 的 客户端凭据授权令牌啊!」是的,您也可以使用,但是:

  • client_id 是有序整数
  • 还需要通过额外的 $request 信息,再去重新相关获取授权信息
  • access_token 那么长,对于一个小应用实在没必要
  • ...

这些您能忍?

反正我是不能忍,所以,弄了这个轮子。

运行环境

  • php >= 5.6
  • composer
  • laravel >= 5.1

特点

  • 简答、易懂、快速
  • 专门为 laravel 打造
  • 使用自带的认证驱动模式
  • 多用户多应用 access_token 模式(类似支付宝/微信公众平台认证模式)

安装

$ composer require yansongda/laravel-api

添加 ServiceProvider(optional. if laravel < 5.5)

// laravel < 5.5
Yansongda\LaravelApi\ApiServiceProvider::class,

使用方法

  1. 更改认证驱动

    在 config/auth.php 中,更改 guards.api.driverapi

  2. 在 UserModel 中添加 trait

    config(auth.provider.xx.model) 的类中,添加 use Yansongda\LaravelApi\Models\Traits\HasApiApps

  3. 运行数据迁移

    php artian migrate

  4. 开始使用吧

添加 App 与 accessToken

use Yansongda\LaravelApi\Api;

$app = Api::createApp(User::find(1), '备注可选');

$access_token = Api::generateAccessToken($app);

客户端使用

获取 access_token

curl --data "app_id=f748864cb16db706be1e408cb49771a3&app_secret=ce57ec31a9f4f37dfbf810c2e4ea79f0" "http://api.dev/api/token"
# {"code":0,"message":"success","data":{"user_id":1,"app_id":"f748864cb16db706be1e408cb49771a3","access_token":"3857d7d56f4ffe1ab57b8a8f292b85fa","expired_in":7200}}

使用

有两种方式可以使用

  • url 带上 access_token 参数进行认证.

    例如: https://api.dev/?access_token=3857d7d56f4ffe1ab57b8a8f292b85fa

  • header 上进行认证

    例如:Authorization: Bearer 3857d7d56f4ffe1ab57b8a8f292b85fa

服务端认证

只需要在增加 'auth:api' 的 middleware 即可,增加后,$request->user()/$request->user 即为认证用户,$request->app 即为认证的 app_id

use Illuminate\Http\Request;

Route::middleware('auth:api')->get('user', function(Request $request) {
    dd($request->user());
    // $request->user 获取 user_id
});
Route::middleware('auth:api')->get('app', function(Request $request) {
    dd($request->app); // 获取 app_id
});

其它

access_token 有效时间

access_token 有效时间默认为 7200 秒,当然,您可以自由设置该值:

// 在 AppServiceProvider 的 register 方法中增加

use Yansongda\LaravelApi\Api;

Api::$ttl = 7200;
// Api::setTtl(7200);

授权 token 路由

默认情况下,token 的授权通过自带的 'api/token' 路由进行 post 授权的,如果您想重写 token 的授权方式,您需要首先:

// 在 AppServiceProvider 的 register 方法中增加

use Yansongda\LaravelApi\Api;

Api::$enableRoute = false;
// Api::enableRoute(false);

授权 token 路由前缀

默认情况下,自带的路由前缀为 api,如果您想更换为其它,请:

// 在 AppServiceProvider 的 register 方法中增加

use Yansongda\LaravelApi\Api;

Api::$routePrefix = 'api';
// Api::setRoutePrefix(’api‘);

授权 token 路由说明

  • 命名为: api.token
  • middleware: api

关于 refresh_token

本着简单易用的原则,并不提供 refresh_token 这种操作,因为发现即使像微信那样提供了 refresh_token 的接口,但是,很多人依然没有去使用,而是直接重新生成新的 access_token。因此,SDK 直接去掉了 refresh_token 的设计。

异常

  • AccessTokenNotProvidedException

    当客户端没有提供 access_token 时,抛出 AccessTokenNotProvidedException 异常,如果不进行任何额外的操作,默认将返回 {"code":1,"message":"AccessToken Is Not Provided"}

  • InvalidAccessTokenException

    当客户端提供了无效的 access_token 时,抛出 InvalidAccessTokenException 异常,如果不进行任何额外的操作,默认将返回 {"code":2,"message":"AccessToken Is Invalid"}

  • AccessTokenExpiredException

    当客户端提供的 access_token 已过期时,抛出 AccessTokenExpiredException 异常,如果不进行任何额外的操作,默认将返回 {"code":3,"message":"AccessToken Is Expired"}

  • GenerateAccessTokenException

    当服务端生成 access_token 失败时,抛出 GenerateAccessTokenException 异常,如果不进行任何额外的操作,默认将返回 {"code":4,"message":"xxxx"}

  • InvalidAppException

    当客户端提供了错误的 app_id 或 app_secret 时,抛出 InvalidAppException 异常,如果不进行任何额外的操作,默认将返回 {"code":5,"message":"Invalid App Info"}

  • CreateAppException

    当服务端生成 app 失败时,抛出 CreateAppException 异常,如果不进行任何额外的操作,默认将返回 {"code":6,"message":"xxxx"}

以上异常如果不想使用默认的信息,均可自行捕获更改相关信息

License

MIT

yansongda/laravel-api 适用场景与选型建议

yansongda/laravel-api 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 857 次下载、GitHub Stars 达 50, 最近一次更新时间为 2018 年 04 月 06 日, 在 PHP 生态内属于活跃度较高的组件。

它主要适用于以下技术方向: 「api」 「laravel」 「access_token」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。

我们在过去多个企业项目中使用过 yansongda/laravel-api 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。

围绕 yansongda/laravel-api 我们能提供哪些服务?
定制开发 / 二次开发

基于 yansongda/laravel-api 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。

BUG 修复 & 性能优化

线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。

项目外包 & 长期维护

承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。

yvsm@zunyunkeji.com QQ:316430983 微信:yvsm316 西安尊云信息科技 · 专注 PHP / Go / 分布式系统研发

统计信息

  • 总下载量: 857
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 50
  • 点击次数: 0
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 50
  • Watchers: 3
  • Forks: 18
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2018-04-06