thesalmankhimani/lumen-passport-mongodb

使Laravel Passport与Lumen和MongoDB协同工作

0.1.0 2019-08-29 14:16 UTC

This package is not auto-updated.

Last update: 2024-09-20 14:40:34 UTC


README

Latest Stable Version Latest Unstable Version License

使Laravel Passport与Lumen和MongoDB协同工作

此仓库是从 dusterio/lumen-passport 分支出来的,并添加了 thesalmankhimani/laravel-passport-mongodb 包,以便使Laravel Passport与Lumen和MongoDB协同工作。

依赖关系

  • PHP >= 5.6.3
  • Lumen >= 5.3
  • jenssegers/mongodb >=3.2
  • theslamankhimani/laravel-passport-mongodb >= 0.1.0

通过Composer安装

如果您还没有安装Lumen,请先安装Lumen

$ composer create-project --prefer-dist laravel/lumen lumen-app

然后安装Lumen Passport(它将一起获取Laravel Passport)

$ cd lumen-app
$ composer require thesalmankhimani/lumen-passport-mongodb

或者,如果您愿意,可以手动编辑 composer.json

{
    "require": {
        "thesalmankhimani/lumen-passport-mongodb": "^0.1.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(\SalKhimani\LaravelPassportMongoDB\PassportServiceProvider::class);
$app->register(\SalKhimani\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 [
	'oauth_prefix' => env('API_OAUTH_PREFIX', 'api/oauth')
];

编辑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 SalKhimani\LaravelPassportMongoDB\HasApiTokens;

class User extends Model implements AuthenticatableContract, AuthorizableContract
{
    use HasApiTokens, Authenticatable, Authorizable;

    /* rest of the model */
}

额外功能

有一些在Laravel Passport中不存在的高级功能

允许每个客户端有多个令牌

有时允许每个密码授权客户端有多个访问令牌很有用。例如,用户可以从多个浏览器同时登录。目前,Laravel Passport不允许这样做。

use SalKhimani\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 Web服务器,它可能会删除Authorization头,从而破坏Passport。

请将以下内容添加到您的配置文件中,或者添加到.htaccess

RewriteEngine On
RewriteCond %{HTTP:Authorization} ^(.*)
RewriteRule .* - [e=HTTP_AUTHORIZATION:%1]

许可证

MIT许可证(MIT)版权所有 (c) 2016 Denis Mysenko

特此授予任何人免费获得此软件及其相关文档副本(“软件”)的权利,在不受限制的情况下处理软件,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或出售软件副本,并允许向获得软件的人提供这样做,前提是满足以下条件

上述版权声明和本许可声明应包含在软件的所有副本或主要部分中。

本软件按“原样”提供,不提供任何形式的保证,无论是明示的、暗示的,还是包括但不限于对适销性、特定用途适用性和非侵权的保证。在任何情况下,作者或版权所有者均不对任何索赔、损害或其他责任承担责任,无论基于合同行为、侵权或其他行为,以及软件、软件的使用或其他与软件有关的交易产生的、源于或与之相关的。