2020年4月

前言

prettus/l5-repository 是一个Laravel 的扩展包,支持Repository和Presenter模式,有着自己的生成器

         'models'       => 'Entities',   // 模型层
        'repositories' => 'Repositories', // 仓库层
        'interfaces'   => 'Repositories\\Contracts', // 仓库的接口
        'transformers' => 'Transformers', // 转化器,给Presenters使用
        'presenters'   => 'Presenters', // 演示层,用于同一数据的转换,通常会结合transformers
        'validators'   => 'Validators', // 验证器
        'controllers'  => 'Http/Controllers', // 控制器
        'provider'     => 'RepositoryServiceProvider', // 服务注册器,用于依赖注入
        'criteria'     => 'Criteria'  // 过滤器,repository的查询过滤器

prettus/l5-repository 是一个很强大的扩展包,但个人感觉不适合前后端开发,Presenters层用不到,有点过度设计的意思

一、安装

composer require laravel/passport

二、配置

三、登录获取Token
1、第一种方式,通过Http 去请求 /oauth/token,其实就相当于把 OAuth2.0 里获取Token所需的参数,根据配置放置,客户端用户只需要传入账号密码,服务器会自行把client_id和client_secret 以及用户的账号密码传入OAuth2.0中。

    $http = new Client();
    // 发送相关字段到后端应用获取授权令牌
    $response = $http->post(config('app.url') . '/oauth/token', [
        'form_params' => [
            'grant_type' => 'password',
            'client_id' => config('services.blog.appid'),
            'client_secret' => config('services.blog.secret'),
            'username' => $credentials['username'],
            'password' => $credentials['password'],
            'scope' => '*'
        ],
    ]);
     return response($response->getBody());

    // 或者

    $request = Request::create('/oauth/token', 'POST', [
        'grant_type' => 'password',
        'client_id' => config('services.blog.appid'),
        'client_secret' => config('services.blog.secret'),
        'username' => $request->username,
        'password' => $request->password,
    ]);

    return app()->handle($request);

2、第二种方式是自己进行数据验证,获取到对应的用户后,并绑定到Auth,再使用 $user->createToken()。

     $credentials = request(['email', 'password']);

    /*验证并绑定。*/
    //注意默认的Laravel Passport是使用RequestGuard 再套TokenGuard的,是不支持attempt方法的。 可以自行验证绑定
    // if(!Auth::attempt($credentials)){ 
    //    return response()->json([
   //         'message' =>'账号或密码错误'
  //      ], 401);
  //  }

    #   RequestGuard中没有验证绑定的方法,它是用于验证Request请求中的user是否合法
    

    $user = $request->user();

    $tokenResult = $user->createToken('Personal Access Token');
    $token = $tokenResult->token;

    if ($request->remember_me)
        $token->expires_at = Carbon::now()->addWeeks(1);

    $token->save();