(1)passport
- 安装
在开始之前, 请通过 Composer 包管理器安装 Passport:
composer require laravel/passport
- 执行迁移
Passport 服务提供器使用框架注册自己的数据库迁移目录,因此在注册提供器后,就应该运行 Passport 的迁移命令来自动创建存储客户端和令牌的数据表:
php artisan migrate
{note} 如果你不打算使用 Passport 的默认迁移,你应该在
AppServiceProvider
的register
方法中调用Passport::ignoreMigrations
方法。 你可以用这个命令php artisan vendor:publish --tag=passport-migrations
导出默认迁移。
- 安装passport
接下来,运行 passport:install
命令来创建生成安全访问令牌时所需的加密密钥,同时,这条命令也会创建用于生成访问令牌的「个人访问」客户端和「密码授权」客户端:
php artisan passport:install
上面命令执行后,请将 Laravel\Passport\HasApiTokens
Trait 添加到 App\User
模型中,这个 Trait 会给你的模型提供一些辅助函数,用于检查已认证用户的令牌和使用范围:
<?php
namespace App;
use Laravel\Passport\HasApiTokens;
use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;
class User extends Authenticatable
{
use HasApiTokens, Notifiable;
}
接下来,在 AuthServiceProvider
的 boot
方法中调用 Passport::routes
函数。这个函数会注册发出访问令牌并撤销访问令牌、客户端和个人访问令牌所必需的路由:
<?php
namespace App\Providers;
use Laravel\Passport\Passport;
use Illuminate\Support\Facades\Gate;
use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider;
class AuthServiceProvider extends ServiceProvider
{
/**
* 应用程序的策略映射。
*
* @var array
*/
protected $policies = [
'App\Model' => 'App\Policies\ModelPolicy',
];
/**
* 注册任何认证/授权服务。
*
* @return void
*/
public function boot()
{
$this->registerPolicies();
Passport::routes();
}
}
最后,将配置文件 config/auth.php
中授权看守器 guards
的 api
的 driver
选项改为 passport
。此调整会让你的应用程序在在验证传入的 API 的请求时使用 Passport 的TokenGuard
来处理:
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
'api' => [
'driver' => 'passport',
'provider' => 'users',
],
],
-
账号验证字段不止邮箱
对于账号验证不止是数据表中的emial字段,还可能是用户名或者手机号字段只需要在User模型中添加findForPassport
方法,示例代码如下:
/**
* 重写此方法(Passport会调用到)
* 重写后支持使用手机号、邮箱、用户名登陆
*/
public function findForPassport($username)
{
// 如果是手机号格式则调用手机号登陆
if (validate_mobile_format($username)) {
return $this->where('mobile', $username)->first();
}
// 如果是邮箱格式则调用邮箱登陆
if (filter_var($username, FILTER_VALIDATE_EMAIL) !== false) {
return $this->where('email', $username)->first();
}
// 最后尝试使用用户名匹配
return $this->where('username', $username)->first();
}
//validate_mobile_format函数是自己写的手机号码验证函数
if (!function_exists('validate_mobile_format'))
{
/**
* 验证手机号格式是否合法
* @param string $mobile
*
* @return bool
*/
function validate_mobile_format($mobile)
{
return preg_match('#^13[\d]{9}$|^14[0-9]\d{8}|^15[0-9]\d{8}$|^16[0-9]\d{8}$|^17[0-9]\d{8}|^18[0-9]\d{8}$|^19[0-9]\d{8}$#', $mobile);
}
}
(2) dingo
前言:
- 安装
修改composer.json文件,在 require中添加
"dingo/api": "2.0.0-alpha2"
- 然后使用命令行,进入项目目录,执行来更新、安装新包
composer update
- 接下来就publish
php artisan vendor:publish --provider="Dingo\Api\Provider\LaravelServiceProvider"
- .env添加基础配置(四个即可):
API_SUBTYPE=dev.yourmao.ldb
API_PREFIX=api
API_VERSION=v1
API_STRICT=false
API_DEBUG=true
顺便注释
API_STANDARDS_TREE - API规格
1 本地或私有环境
2 prs 非商业销售的项目
3 vnd 公开的以及商业销售的项目
API_SUBTYPE - API简称
API_PREFIX - API前缀(或使用API_DOMAIN - API子域名)
API_VERSION - API默认版本
API_NAME - API名称
API_CONDITIONAL_REQUEST - 带条件的请求,由于缓存API请求的时候会使用客户端缓存功能,所以默认开启了带条件的请求
API_STRICT - 严格模式,要求客户端发送Accept头而不是默认在配置文件中指定的版本
API_DEFAULT_FORMAT - 响应格式,默认的响应格式是JSON API_DEBUG - 调试模式
创建Api
修改routes/api.php
<?php
$api = app("Dingo\Api\Routing\Router");
$api->version('v1', function ($api) {
$api->group(["namespace" => "App\Api\Controllers"], function ($api) {
//之后在这里写api
});
});
创建BaseController
<?php
namespace App\Api\V1\Controllers;
use Illuminate\Routing\Controller;
use Dingo\Api\Routing\Helpers;
class BaseController extends Controller
{
use Helpers;
//其他初始化操作
}