kayrules / lumen-passport-mongodb
使 Laravel Passport 在 Lumen 和 MongoDB 上工作
Requires
- php: >=5.6.4
- illuminate/database: ~5.3|~5.4
- illuminate/support: ~5.3|~5.4
- lucas-cardial/laravel-passport-mongodb: ^0.1.0
Requires (Dev)
- codeclimate/php-test-reporter: dev-master
- fzaninotto/faker: ~1.4
- phpunit/phpunit: ~5.0
README
使 Laravel Passport 在 Lumen 和 MongoDB 上工作
此存储库是从 dusterio/lumen-passport 分支出来的,并添加了 lucca-cardial/laravel-passport-mongodb 包,以使 Laravel Passport 与 Lumen 和 MongoDB 一起工作。
依赖
- PHP >= 5.6.3
- Lumen >= 5.3
- jenssegers/mongodb >=3.2
- lucas-cardial/laravel-passport-mongodb >= 1.0
通过 Composer 安装
如果还没有安装 Lumen,请先安装 Lumen
$ composer create-project --prefer-dist laravel/lumen lumen-app
然后安装 Lumen Passport(这将安装 Laravel Passport)
$ cd lumen-app
$ composer require kayrules/lumen-passport-mongodb
或者,如果您愿意,可以手动编辑 composer.json
{ "require": { "kayrules/lumen-passport-mongodb": "^0.3.0" } }
修改引导流程(bootstrap/app.php
文件)
我们需要同时启用 Laravel Passport 提供器和 Lumen 特定提供器
// Enable Facades $app->withFacades(); // Register jenssegers/mongodb service provider before `$app->withEloquent()` $app->register(Jenssegers\Mongodb\MongodbServiceProvider::class); // Enable Eloquent $app->withEloquent(); // Enable auth middleware (shipped with Lumen) $app->routeMiddleware([ 'auth' => App\Http\Middleware\Authenticate::class, ]); // Finally register service providers $app->register(Kayrules\LumenPassport\PassportServiceProvider::class);
迁移并安装 Laravel Passport
# Create new tables for Passport php artisan migrate # Install encryption keys and other necessary stuff for Passport php artisan passport:install
已安装的路由
添加此服务提供器,将挂载以下路由。
请注意,由于 Laravel Passport 的某些路由与 Web 相关并依赖于会话(例如,授权页面),因此它们必须“消失”。Lumen 是一个 API 框架,因此仅包含与 API 相关的路由。
配置
编辑 config/api.php 以添加所有 API 端点的前缀。(例如:/api/oauth/token
)
return [ 'prefix' => env('API_PREFIX', 'api') ];
编辑 config/auth.php 以满足您的需求。以下是一个简单的示例
return [ 'defaults' => [ 'guard' => 'api', 'passwords' => 'users', ], 'guards' => [ 'api' => [ 'driver' => 'passport', 'provider' => 'users', ], ], 'providers' => [ 'users' => [ 'driver' => 'eloquent', 'model' => \App\User::class ] ] ];
用户模型
确保您的用户模型使用 Passport 的 HasApiTokens
特性,例如。
use MoeenBasra\LaravelPassportMongoDB\HasApiTokens; class User extends Model implements AuthenticatableContract, AuthorizableContract { use HasApiTokens, Authenticatable, Authorizable; /* rest of the model */ }
额外功能
有一些 Laravel Passport 中没有的额外功能
允许每个客户端有多个令牌
有时允许每个密码授权客户端有多个访问令牌很有用。例如,用户可以从多个浏览器同时登录。目前 Laravel Passport 不允许这样做。
use Kayrules\LumenPassport\LumenPassport; // Somewhere in your application service provider or bootstrap process LumenPassport::allowMultipleTokens();
不同密码客户端的不同 TTL
Laravel Passport 允许为访问令牌设置一个全局 TTL,但有时可能需要为不同的客户端设置不同的 TTL(例如,移动用户比桌面用户有更多时间)。
只需在您的服务提供器中执行以下操作
// Second parameter is the client Id LumenPassport::tokensExpireIn(Carbon::now()->addYears(50), 2);
如果您没有指定客户端 ID,它将简单地回退到 Laravel Passport 实现。
清除过期令牌的命令行
只需运行 php artisan passport:purge
就可以从数据库中删除过期的刷新令牌及其对应的访问令牌。
与 Apache httpd 运行
如果您使用的是 Apache 网络服务器,它可能会剥离 Authorization 标头,从而破坏 Passport。
请将以下内容添加到您的配置中或 .htaccess
RewriteEngine On
RewriteCond %{HTTP:Authorization} ^(.*)
RewriteRule .* - [e=HTTP_AUTHORIZATION:%1]
许可
MIT 许可证(MIT)版权所有 (c) 2016 Denis Mysenko
特此授予任何人无限制地使用此软件及其相关文档文件(“软件”)的权利,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或销售软件副本,以及允许向软件提供方提供软件副本的人使用软件的权利,前提是符合以下条件
上述版权声明和本许可声明应包含在软件的所有副本或主要部分中。
本软件按“原样”提供,不提供任何形式的保证,无论是明示还是暗示,包括但不限于对适销性、特定用途适用性和非侵权的保证。在任何情况下,作者或版权持有人不对任何索赔、损害或其他责任负责,无论源于合同行为、侵权或其他原因,与该软件或其使用或其他方式相关。