laravel Passport - 创建 REST API 用户认证以及Dingo/Api v2.0+Passport实现api认证

第一部分:

安装passport

使? Composer 依赖包管理器安装 Passport :

composer require laravel/passport  

接下来,将 Passport 的服务提供者注册到配置?件  config/app.php  的providers  数组中:(5.6后不用加 )

Laravel\Passport\PassportServiceProvider::class

utf8 的 varchar 类型字符串最长255,换成utf8mb4最长是191,然而框架里面默认长度还是用的 255 导致长度不够了。

所以我们要修改app/Providers/AppServiceProvider.php :
    use Illuminate\Support\Facades\Schema;   

    public function boot()
    {
        Schema::defaultStringLength(191);
    }  

在.env 和congfig/database.php文件配置好数据库

然后运行artisan生成数据表:

    php artisan make:auth //必须先运行这个,因为Passport 使用服务提供者注册内部的数据库迁移脚本目录
    php artisan migrate //再更新  

然后运行 passport:install 命令来创建生成安全访问令牌时用到的加密密钥,同时,这条命令也会创建「私人访问」客户端和「密码授权」客户端:

php artisan passport:install

完成上面的步骤,我们可以配置一下Passport。

1. 在Model中,我们需要增加 HasApiTokens class,
2. 在AuthServiceProvider中, 增加 "Passport::routes()", 还可以增加过期时间
3. 在 auth.php中, 更改 api 认证方式为password.

1. app/User.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;

    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        ‘name‘, ‘email‘, ‘password‘,
    ];

    /**
     * The attributes that should be hidden for arrays.
     *
     * @var array
     */
    protected $hidden = [
        ‘password‘, ‘remember_token‘,
    ];
}

2. app/Providers/AuthServiceProvider.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();
  
        Passport::tokensExpireIn(now()->addDays(30));  //这里设置为30天过期

        Passport::refreshTokensExpireIn(now()->addDays(30));


} }

3. config/auth.php

return [
    .....
    .....
    ‘guards‘ => [
        ‘web‘ => [
            ‘driver‘ => ‘session‘,
            ‘provider‘ => ‘users‘,
        ],
        ‘api‘ => [
            ‘driver‘ => ‘passport‘,//这里做了修改
            ‘provider‘ => ‘users‘,
        ],
    ],
    .....
    .....
]

配置 routes/api.php ,增加相应API路由配置

Route::post(‘login‘, ‘api\[email protected]‘);
Route::post(‘register‘, ‘api\[email protected]‘);  

Route::group([‘middleware‘ => ‘auth:api‘], function(){
    Route::post(‘details‘, ‘api\[email protected]‘);
});  

创建controller    ---》php artisan make:controller Api/LoginController

代码如下

class LoginController extends Controller
{

    public $successStatus = 200;

    /**
     * login api
     *
     * @return \Illuminate\Http\Response
     */
    public function login(){
        if(Auth::attempt([‘email‘ => request(‘email‘), ‘password‘ => request(‘password‘)])){
            $user = Auth::user();
            $success[‘token‘] =  $user->createToken(‘MyApp‘)->accessToken;
            return response()->json([‘success‘ => $success], $this->successStatus);
        }
        else{
            return response()->json([‘error‘=>‘Unauthorised‘], 401);
        }
    }

    /**
     * Register api
     *
     * @return \Illuminate\Http\Response
     */
    public function register(Request $request)
    {
        $validator =Validator::make($request->all(), [
            ‘name‘ => ‘required‘,
            ‘email‘ => ‘required|email‘,
            ‘password‘ => ‘required‘,
            ‘c_password‘ => ‘required|same:password‘,
        ]);

        if ($validator->fails()) {
            return response()->json([‘error‘=>$validator->errors()], 401);
        }

        $input = $request->all();
        $input[‘password‘] = bcrypt($input[‘password‘]);
        $user = \App\User::create($input);
        $success[‘token‘] =  $user->createToken(‘MyApp‘)->accessToken;
        $success[‘name‘] =  $user->name;

        return response()->json([‘success‘=>$success], $this->successStatus);
    }

    /**
     * details api
     *
     * @return \Illuminate\Http\Response
     */
    public function details()
    {
        $user = Auth::user();
        return response()->json([‘success‘ => $user], $this->successStatus);
    }

我们测试API使用Postman,在谷歌浏览器插件里可以安装它。

2. Login API

3. Get Detailss API

Now,我们来测试API数据获取, 我们需要添加headers在测试Postman中,$accessToken使用Login中的Token即可  格式 Authorization     Bearer空格+token

第二部分:Dingo/Api v2.0+Passport实现api认证1.在composer.json中添加
"require": {
    "dingo/api": "2.0.0-alpha1"
}

2.在控制台中运行

php artisan vendor:publish --provider="Dingo\Api\Provider\LaravelServiceProvider"

打开 config/app.php,注册必要的 service provider 在你的应用 providers 之前 5.6后可以不加

    ‘providers‘ => [
        Dingo\Api\Provider\LaravelServiceProvider::class
    ]  

再次设置更改路由,

打开 routes/api.php 文件添加

$api = app(‘Dingo\Api\Routing\Router‘);
$api->version(‘v1‘,function ($api) {
    $api->post(‘login‘, ‘App\Http\Controllers\Api\[email protected]‘);
    $api->post(‘register‘, ‘App\Http\Controllers\Api\[email protected]‘);
    $api->group([‘middleware‘ => ‘auth:api‘], function($api){
        $api->post(‘details‘, ‘App\Http\Controllers\Api\[email protected]‘);
    });
});

这里我们可以用刚才生成的Client ID与Client Secret来密码认证访问,注册,登录 与详情页面,都能正常访问。(这几个页面的访问不变,程序代码不变)。

原文地址:https://www.cnblogs.com/zuochuang/p/8868166.html

时间: 2024-08-08 06:46:37

laravel Passport - 创建 REST API 用户认证以及Dingo/Api v2.0+Passport实现api认证的相关文章

Laravel 5.5 使用 Jwt-Auth 实现 API 用户认证

安装 composer require tymon/jwt-auth 1.0.0-rc.1 配置 添加服务提供者 'providers' => [ Tymon\JWTAuth\Providers\LaravelServiceProvider::class, ] 发布配置文件 php artisan vendor:publish --provider="Tymon\JWTAuth\Providers\LaravelServiceProvider" 生成密钥 php artisan

rhce认证考试-创建一个添加用户脚本

创建一个添加用户的脚本 在server0上创建一个名为/root/batchusers,此脚本能够实现为系统system1创建本地用户,并且这些用户的用户名来自一个包含用户名列表的文件,同时满足下列要求: 1.此脚本要求提供一个参数,此参数就是包含用户名列表的文件 2.如果没有提供参数,此脚本应该给出下面的提示信息Usage: /root/batusers userfile ,并且退出返回相应的值 3.如果提供一个不存在的文件名,此脚本应该给出下面的提示信息Input file not foun

给postgresql 创建新的用户

\du 查看当前postgresql的用户,一般此时只能看到 postgres create user ysr superuser password '123456'; \du 就可以看到两个用户了. 参考:http://www.cnblogs.com/stephen-liu74/archive/2012/05/18/2302639.html http://blog.csdn.net/beiigang/article/details/8604578 -----------------------

ASP.NET Web API(二):安全验证之使用HTTP基本认证

在前一篇文章ASP.NET Web API(一):使用初探,GET和POST数据中,我们初步接触了微软的REST API: Web API. 我们在接触了Web API的后就立马发现了有安全验证的需求,所以这篇文章我们先来讨论下安全验证一个最简单的方法:使用HTTP基本认证. HTTP基本认证原理 在HTTP协议进行通信的过程中,HTTP协议定义了基本认证过程以允许HTTP服务器对WEB浏览器进行用户身份认证的方法,当一个客户端向HTTP服务器进行数据请求时,如果客户端未被认证,则HTTP服务器

Oracle创建表空间 用户 授权

创建表空间 用户 授权 create tablespace liuzhen_tablespace   datafile 'D:\liuzhen_oracle_data\liuzhen_data.dbf' size 50m   autoextend on  next 50m maxsize 20480m   extent management local; create user liuzhen identified by 123456   default tablespace liuzhen_t

oracle创建表空间-用户-角色-授权

1.创建数据表空间: SQL> create tablespace rusky_data 2 datafile 'D:\rusky\rusky_data01,dbf' size 10M 3 autoextend on 4 next 10M maxsize 1024m 5 extent management local; 表空间已创建. EXTENT MANAGEMENT LOCAL:存储区管理方法.本地管理(LOCAL):用二进制的方式管理磁盘,有很高的效率,同进能最大限度的使用磁盘. 同时能够

Oracle 12c 创建新普通用户

1.开始——运行——cmd输入:sqlplus/ as sysdba 连接到 数据库 2.创建 c# #scott用户 CREATE USER c##scott IDENTIFIED BY tiger ; 3.为用户授权 GRANT CONNECT ,RESOURCE,UNLIMITED TABLESPACE TO c##scott CONTAINER= ALL ; 4.设置用户使用的表空间 ALTER USER c##scott DEFAULT TABLESPACE USERS; ALTER

Linux创建修改删除用户和组

Linux 创建修改删除用户和组 介绍 在日常的维护过程中创建用户操作用的相对会多一些,但是在这个过程中涉及到的知识点就不单单就是useradd了,接下来就来详细了解账号管理的相关信息. 用户信息 先从用户信息开始分析,可以通过查询/etc/password文件,每一行代表一个用户信息 root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin m

Linux 创建修改删除用户和组

200 ? "200px" : this.width)!important;} --> 介绍 在日常的维护过程中创建用户操作用的相对会多一些,但是在这个过程中涉及到的知识点就不单单就是useradd了,接下来就来详细了解账号管理的相关信息. 用户信息 先从用户信息开始分析,可以通过查询/etc/password文件,每一行代表一个用户信息 root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon