侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

centos7+laravel7+Passport 帮你快速实现api认证

Laravel  /  管理员 发布于 2年前   1450

centos7+laravel7+Passport 帮你快速实现api认证

技术文档如果没断的话可以接上上上一篇的,这一篇是讲laravel7+Passport 实现api认证,环境是上上一篇文章的环境(如果关注过我之前的文章的话)

正常进入流程 官方composer安装 (具体意思可以自行搜索)

composer require laravel/passport
php artisan migrate
php artisan passport:install

1.将 Laravel\Passport\HasApiTokens Trait 添加到 App\User 模型中,这个 Trait 会给你的模型提供一些辅助函数,用于检查已认证用户的令牌和使用范围:

<?php
namespace App;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
use Laravel\Passport\HasApiTokens;
class User extends Authenticatable
{
    use Notifiable,HasApiTokens;
    /**
     * The attributes that are mass assignable.
     * @var array
     */
    protected $fillable = [
        'name', 'email', 'password',
    ];

2.接下来,在 AuthServiceProvider 的 boot 方法中调用 Passport::routes 函数。这个函数会注册发出访问令牌并撤销访问令牌、客户端和个人访问令牌所必需的路由.

修改app/Providers/AuthServiceProvider .php

<?php
namespace App\Providers;
use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider;
use Illuminate\Support\Facades\Gate;
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路由 为 颁发访问令牌、撤销访问令牌、客户端以及私人访问令牌 注册必要的路由
        Passport::routes();
    }
}

3.修改配置文件 config/auth.php 中授权看守器 guards 的 api 的 driver 选项改为 passport。此调整会让你的应用程序在在验证传入的 API 的请求时使用 Passport 的 TokenGuard 来处理

'guards' => [
        'web' => [
            'driver' => 'session',
            'provider' => 'users',
        ],
        'api' => [
            //'driver' => 'token',
            'driver' => 'passport',
            'provider' => 'users',
            'hash' => false,
        ],
    ],

4.添加路由 route/api.php (测试/注册/登录/查询用户信息 接口)

Route::post('/htz-api', function () {
    return 'test123';
});
Route::post('/login', 'UserController@login');
Route::post('/register', 'UserController@register');
Route::group(['middleware'=>'auth:api'], function () {
    Route::post('/details', 'UserController@details');
});

5.根据路由创建控制器,添加api方法

<?php
/**htz-api*/
namespace App\Http\Controllers;
use Validator;
use App\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
class UserController extends Controller
{
    public $Code = 200;
    
    //login
    public function login()
    {
        if(Auth::attempt(['name'=>request('name'),'password'=>request('password')]))
        {
            $user = Auth::user();
            $success['token'] = $user->createToken('MyApp')->accessToken;
            return Response()->json(['success'=>$success],$this->Code);
        }else{
            return Response()->json(['error'=>'Unauthorised'],401);
        }
    }
    /**
     * register function
     * @param Request $request
     * @return void
     */
    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']);
        $input['remember_token']    = '';
        $user                          = User::create($input);
        $success['token']              = $user->createToken('MyApp')->accessToken;
        $success['name']               = $user->name;
        return Response()->json(['success'=>$success],$this->Code);
    }
    /**
     * get user infomation function
     * @return void
     */
    public function details()
    {
        $user = Auth::user();
        return response()->json(['success' => $user], $this->Code);
    }
}

6.最后测试 我这里用了ApiPost这个软件(有兴趣的自行搜索),它也可以本地测试

注册接口测试  :register

1.png

注册成功 表里面已经有了

2.png

登录接口测试  :login

3.png

查询用户信息接口测试  :details

4.png


  • 上一条:
    web开发-前后端分离原理/思想浅析
    下一条:
    centos7+laravel7+swooletw/laravel-swoole扩展包的使用流程步骤及简单的websocket服务测试
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • 在Laravel项目中使用中间件方式统计用户在线时长功能代码示例(0个评论)
    • 在Laravel中构建业务流程模型(0个评论)
    • 在Laravel项目中的实现无密码认证之:发送邮箱链接授权(0个评论)
    • Laravel 10.4版本发布(0个评论)
    • 在laravel框架中的5个HTTP客户端技巧分享(0个评论)
    • 近期文章
    • 如何优雅处理async await错误推荐:await-to-js库(0个评论)
    • lodash工具库(0个评论)
    • 在Laravel项目中使用中间件方式统计用户在线时长功能代码示例(0个评论)
    • 在Laravel中构建业务流程模型(0个评论)
    • windows系统中安装FFMpeg及在phpstudy环境php7.3 + php-ffmpeg扩展的使用流程步骤(0个评论)
    • 在go语言中对浮点的数组、切片(slice)进行正向排序和反向排序(0个评论)
    • 在go语言中对整数数组、切片(slice)进行排序和反向排序(0个评论)
    • 在go语言中对字符串数组、切片(slice)进行排序和反向排序(0个评论)
    • 最新国内免注册ChatGPT体验站_ChatGPT镜像站访问链接地址2023/3/28持续更新(0个评论)
    • 在Laravel项目中的实现无密码认证之:发送邮箱链接授权(0个评论)
    • 近期评论
    • 博主 在

      2023年国务院办公厅春节放假通知:1月21日起休7天中评论 @ xiaoB 你只管努力,剩下的叫给天意;天若有情天亦老,..
    • xiaoB 在

      2023年国务院办公厅春节放假通知:1月21日起休7天中评论 会不会春节放假后又阳一次?..
    • BUG4 在

      你翻墙过吗?国内使用vpn翻墙可能会被网警抓,你需了解的事中评论 不是吧?..
    • 博主 在

      go语言+beego框架中获取get,post请求的所有参数中评论 @ t1  直接在router.go文件中配就ok..
    • Jade 在

      如何在MySQL查询中获得当月记录中评论 Dear zongscan.com team, We can skyroc..
    • 2016-10
    • 2016-11
    • 2017-07
    • 2017-08
    • 2020-03
    • 2020-04
    • 2020-05
    • 2020-06
    • 2020-07
    • 2020-08
    • 2020-09
    • 2020-10
    • 2020-11
    • 2021-01
    • 2021-02
    • 2021-03
    • 2021-04
    • 2021-05
    • 2021-06
    • 2021-07
    • 2021-08
    • 2021-09
    • 2021-10
    • 2021-11
    • 2021-12
    • 2022-01
    • 2022-02
    • 2022-03
    • 2022-04
    • 2022-05
    • 2022-06
    • 2022-07
    • 2022-08
    • 2022-09
    • 2022-10
    • 2022-11
    • 2022-12
    • 2023-01
    • 2023-02
    • 2023-03
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客