laravel5.4中使用Passport-Api认证

2017年8月27日

一 、具体步骤如下:

1.Composer包管理工具安装passport

 

composer require laravel/passport

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

 

Laravel\Passport\PassportServiceProvider::class,

3.Passport 服务提供着为框架注册了自己的数据库迁移目录,生成用于存放客户端和访问令牌的数据表

 

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

4.创建生成安全访问令牌(token)所需的加密键,该命令还会创建“personal access”和“password grant”客户端用于生成访问令牌

 

php artisan passport:install

5.添加 Laravel\Passport\HasApiTokens trait 到 App\User 模型,该 trait 将会为模型类提供一些辅助函数用于检查认证用户的 token 和 scope

 

<?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;
}

6.在 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
{
/**
     * The policy mappings for the application.
     * * @var array
      */
protected $policies = [
       ‘App\Model’ => ‘App\Policies\ModelPolicy’,
];
/**
    * 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’,
],
],

二、就将passport安装完成。下面,我们在已有用户的系统上进行测试操作。

1. 编写测试控制器UserController

 

<?php
namespace App\Http\Controllers\Api;
use App\Http\Controllers\Controller;
use Facades\App\Services\Api\ApiService;
use Auth;
class UserController extends Controller
{
//模拟测试 passport
public function login()
{
if (Auth::attempt([’email’ => request(’email’), ‘password’ => request(‘password’)])) {
$user = Auth::user();
$data = $user->createToken(‘Pizza App’)->accessToken;
return ApiService::run(200, [‘token’ => $data]);//自己封装的数据统一返回格式
} else {
return ApiService::run(401);//自己封装的数据统一返回格式
}
}
}

2.Api.php 中注册使用到的路由。

 

Route::middleware(‘auth:api’)->get(‘/user’, function (Request $request) {
return $request->user();
});
Route::group([‘namespace’ => ‘Api’], function () {
Route::post(‘/login_test’, ‘UserController@login’);
});

3.运行结果:图片1是登录得到token,图片2拿到token去校验用户信息。

 

注意校验的时候需要在token前加 “Bearer ”,没有写错,Bearer后边有空格,因为源码就是这么写的。如下图

No Comments

Comments are closed.