laravel passport的使用、api认证

passport是laravel为解决api登录认证而在laravel 5.3版本后增加的一款扩展包,是用起来很方便,下面直接贴自己使用时候的代码,具体介绍我就不多说,不明白请查看官方文档。

工具:postman/phpstorm
版本:laravel-5.4

一、安装

1、下载:

composer require laravel/passport

2、注册服务到服务提供者:(config/app.php)

Laravel\Passport\PassportServiceProvider::class,

3、使用迁移文件生成passport所需数据表:(默认迁移可以修改,具体请查看官方文档)

php artisan migrate

4、接下来安装passport这一步将会生成相关的密钥。

php artisan passport:install

注:oauth的公密和私密是放在storage目录下,所以站点搬家时候需注意一下重新运行安装命令生成这些相关的数据。

5、添加 Laravel\Passport\HasApiTokens trait 到 App\User 模型

1
2
3
4
5
6
7
8
9
10
11
12
<?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 方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<?php

namespace App\Providers;

use Illuminate\Support\Facades\Gate;
use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider;
use Laravel\Passport\Passport;

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、修改api认证的driver,切换到passport

1
2
3
4
5
6
7
8
9
10
11
12
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],

'api' => [
//'driver' => 'token',
'driver' => 'passport',
'provider' => 'users',
],
],

安装到这里就结束了。再次提醒第4个步骤,在迁移项目时候,要特别注意。

二、使用passport

在controller目录下创建Api文件夹,一般在下面创建版本V1、V2……Vn。这里测试,就没有创建版本。然后在Api目录下创建UserController用于api认证。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<?php
/**
* Created by PhpStorm.
* User: Blue
* Date: 2017/7/12
* Time: 15:36
*/

namespace App\Http\Controllers\Api;

use Facades\App\Service\Api\ApiService;
use Illuminate\Support\Facades\Auth;


class UserController extends BaseController
{

/**
* 登录验证
* @return mixed
*/
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);//自己封装的数据统一返回格式
}
}
}

api路由

1
2
3
4
5
6
7
Route::middleware('auth:api')->get('/user', function (Request $request) {
return $request->user();
});

Route::group(['namespace' => 'Api'], function () {
Route::post('/login', 'UserController@login');
});

运行截图

扩展阅读:
Laravel Passport 之API授权
Laravel 使用 JWT 实现 API Auth, 打造用户授权接口