zoukankan      html  css  js  c++  java
  • 每天一点点之laravel框架

    1.首先通过 Composer 包管理器安装 Passport:

    composer require laravel/passport

    注:如果安装过程中提示需要更高版本的 Laravel:laravel/passport v5.0.0 requires illuminate/http ~5.6,可以通过指定版本来安装 composer require laravel/passport ~4.0

    2.注册服务提供者

    将 Passport 的服务提供者注册到配置文件 config/app.php 的 providers 数组中

    LaravelPassportPassportServiceProvider::class,

    Laravel 5.5之后会自动注册服务提供者

    3.迁移数据库

    php artisan migrate

    注:如果你不想使用 Passport 的默认迁移,需要在 AppServiceProvider 的 register 方法中调用 Passport::ignoreMigrations 方法。你可以使用 php artisan vendor:publish --tag=passport-migrations 导出默认迁移。

    部署 Passport

    第一次部署 Passport 到生产服务器时,可能需要运行 passport:keys 命令。这个命令生成 Passport 需要的加密 keys 以便生成访问令牌,生成的 keys 将不会存放在源代码控制中:

    php artisan passport:keys

    4.创建生成安全访问令牌(token)所需的加密键

    需要运行 passport:install 命令,该命令将会创建生成安全访问令牌(token)所需的加密键,此外,该命令还会创建「personal access」和「password grant」客户端用于生成访问令牌:

    php artisan passport:install
    生成记录存放在数据表 oauth_clients

    5.运行完这个命令后,添加 LaravelPassportHasApiTokens trait 到 AppUser 模型,该 trait 将会为模型类提供一些辅助函数用于检查认证用户的 token 和 scope:

    <?php
    
    namespace App;
    
    use LaravelPassportHasApiTokens;
    use IlluminateNotificationsNotifiable;
    use IlluminateFoundationAuthUser as Authenticatable;
    
    class User extends Authenticatable
    {
        use HasApiTokens, Notifiable;
    }

    6.接下来,你需要在 AuthServiceProvider 的 boot 方法中调用 Passport::routes 方法,该方法将会为颁发访问令牌、撤销访问令牌、客户端以及私人访问令牌注册必要的路由:

    <?php
    
    namespace AppProviders;
    
    use LaravelPassportPassport;
    use IlluminateSupportFacadesGate;
    use IlluminateFoundationSupportProvidersAuthServiceProvider as ServiceProvider;
    
    class AuthServiceProvider extends ServiceProvider
    {
        /**
         * The policy mappings for the application.
         *
         * @var array
         */
        protected $policies = [
            'AppModel' => 'AppPoliciesModelPolicy',
        ];
    
        /**
         * Register any authentication / authorization services.
         *
         * @return void
         */
        public function boot()
        {
            $this->registerPolicies();
    
            Passport::routes();
        }
    }

    7.最后,在配置文件 config/auth.php 中,需要设置 api 认证 guard 的 driver 选项为 passport。这将告知应用在认证输入的 API 请求时使用 Passport 的 TokenGuard

    'guards' => [
        'web' => [
            'driver' => 'session',
            'provider' => 'users',
        ],
    
        'api' => [
            'driver' => 'passport',
            'provider' => 'users',
        ],
    ],

    密码授权令牌

    OAuth2 密码授权允许你的其他第一方客户端,例如移动应用,使用邮箱地址/用户名+密码获取访问令牌。这使得你可以安全地颁发访问令牌给第一方客户端而不必要求你的用户走整个 OAuth2 授权码重定向流程。

    创建密码发放客户端

    在应用可以通过密码授权颁发令牌之前,需要创建一个密码授权客户端,你可以通过使用带 --password 选项的 passport:client 命令来实现。如果你已经运行了 passport:install 命令,则不必再运行这个命令:

    php artisan passport:client --password

    这里我们使用一开始通过 passport:install 命令创建的记录作为测试记录。

    请求令牌

    创建完密码授权客户端后,可以通过发送 POST 请求到 /oauth/token 路由(带上用户邮箱地址和密码)获取访问令牌。这个路由已经通过 Passport::routes 方法注册过了,不需要手动定义。如果请求成功,就可以从服务器返回的 JSON 响应中获取 access_token 和 refresh_token

    和通过授权码返回数据格式一致。

    这里的username使用的是email,如果想要通过name、iphone来获取,需要在users模型中添加一下方法

        // 允许passport通过这些字段找到你的用户实例
        public function findForPassport($name)
        {
            $user = Users::where('name', $name)
                // ->orWhere('phone', $name)
                ->orWhere('email', $name)
                ->first();
            return $user;
        }

    注:记住,访问令牌默认长期有效,不过,如果需要的话你也可以配置访问令牌的最长生命周期

     友情链接:

      laravel官网-API身份验证

      [ Laravel 5.6 文档 ] 安全系列 —— API 认证

  • 相关阅读:
    Redis5.x五种数据类型常见命令
    Redis5.x安装以及常见数据类型
    《Redis5.x入门教程》正式推出
    PPT制作套路指南
    如何更优雅地对接第三方API
    软件开发要质量还是要效率?
    前后端分离对于开发人员的挑战
    Spring中老生常谈的FactoryBean
    消费端如何保证消息队列MQ的有序消费
    《ElasticSearch6.x实战教程》之实战ELK日志分析系统、多数据源同步
  • 原文地址:https://www.cnblogs.com/cap-rq/p/10145523.html
Copyright © 2011-2022 走看看