laravel安装和部署dingo+passport

(1)passport

前言:laravel-china文档:Passport OAuth 认证

  • 安装

在开始之前, 请通过 Composer 包管理器安装 Passport:

composer require laravel/passport
  • 执行迁移

Passport 服务提供器使用框架注册自己的数据库迁移目录,因此在注册提供器后,就应该运行 Passport 的迁移命令来自动创建存储客户端和令牌的数据表:

php artisan migrate

{note} 如果你不打算使用 Passport 的默认迁移,你应该在 AppServiceProviderregister 方法中调用 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;
}

接下来,在 AuthServiceProviderboot 方法中调用 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 中授权看守器 guardsapidriver 选项改为 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

前言:

(1)github地址:dingo/api

(laravel-china)Dingo API 2.0.0 中文文档

  • 安装

修改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;

    //其他初始化操作

}

猜你喜欢

转载自blog.csdn.net/qq_27295403/article/details/82985475