laravel的api登陆认证

前言

在当今的Web开发中,API的安全认证与授权是构建可靠服务不可或缺的一环。本指南将带您深入探索如何使用tymon/jwt-auth这一流行的JWT(JSON Web Tokens)认证包,为Laravel API项目增添一层安全屏障。从安装tymon/jwt-auth开始,我们将一步步指导您如何配置JWT认证,包括发布配置文件、生成JWT密钥、更新用户模型以及配置认证守卫。此外,我们还将通过dingo/api的配置,展示如何优雅地处理API请求。接着,通过失败与成功的认证例子,您将学会如何设计安全的认证路由及其方法。最后,我们还将探讨如何根据JWT token获取用户信息,为后续的API请求提供身份验证依据。无论您是Laravel API开发的新手,还是希望提升API安全性的资深开发者,本指南都将为您提供宝贵的参考和实战指导。

Dingo/Api认证文档

JWT介绍文档

1、tymon/jwt-auth api认证

1.1 安装tymon/jwt-auth

tymon/jwt-auth安装介绍文档

1、安装tymon/jwt-auth

composer require tymon/jwt-auth
在这里插入图片描述

1-1 安装报错可看,不报错可越过。

如果安装过程中报错,建议先使用php7.x因为现在高版本还不适配,如果你的homesteadphp版本高的话可以降低版本:
使用命令:

sudo update-alternatives --config php 执行后,会列出当前 php 所有版本和编号,输入编号,切换到执行的版本。
在这里插入图片描述

当前切换后切记homestead的环境php也要对应php版本,修改Homestead.yaml
在这里插入图片描述
修改完后记得sudo vagrant reload --provision重启下虚拟机。

2、发布配置文件,生成 JWT_SECRET

1、发布配置文件

php artisan vendor:publish --provider="Tymon\JWTAuth\Providers\LaravelServiceProvider"
在这里插入图片描述

2、生成 JWT_SECRET
php artisan jwt:secret
在这里插入图片描述
在这里插入图片描述

3、更新User模型

认证一般基于用户,所以我们修改用户模型:
在这里插入图片描述
还要增加两个方法:

/**
     * Get the identifier that will be stored in the subject claim of the JWT.
     *
     * @return mixed
     */
    public function getJWTIdentifier()
    {
        return $this->getKey();
    }

    /**
     * Return a key value array, containing any custom claims to be added to the JWT.
     *
     * @return array
     */
    public function getJWTCustomClaims()
    {
        return [];
    }

在这里插入图片描述

Tips:如果你是自己创建的模型做认证的话那么你的模型要继承原始User模型,如下:
在这里插入图片描述
在这里插入图片描述

4、配置 Auth guard

在这里插入图片描述

Tips:如果是做前后台都要jwt认证的话,那么这块就写成:
在这里插入图片描述
那么在providers中修改:

在这里插入图片描述
在这里插入图片描述
具体你要那个模型做驱动。
那么在路由认证这块就要修改为具体是哪个认证守卫了:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2、dingo/api配置

config/api.php 文件:

'auth' => [
        'jwt' => 'Dingo\Api\Auth\Provider\JWT',
    ],

在这里插入图片描述

3、认证例子

3.1 失败例子

1、认证路由

routes/api下增加需要登录的路由:

    // 需要登陆的路由
    $api->group(['middleware' => 'api.auth'], function($api) {
        $api->get('users', [\App\Http\Controllers\TestController::class, 'users']);
    });

在这里插入图片描述

2、认证路由方法

    public function users() {
        $users = User::all();
        return $this->response->collection($users, new UserTransformer);
    }

Providers/AppServiceProviderboot方法里写入:

app('Dingo\Api\Exception\Handler')->register(function (AuthenticationException $exception) {
            return response()->json([
                'msg' => 'Unauthenticated',
                'status_code' => 401
            ]);
        });

在这里插入图片描述

效果:
在这里插入图片描述
可以看到需要认证了。

3.2 成功例子

1、登陆路由

    // 执行登陆
    $api->post('login', [\App\Http\Controllers\TestController::class, 'login']);

在这里插入图片描述

2、登陆路由方法

我们先用dd(bcrypt('12345')获取到加密的密文:
在这里插入图片描述
找到数据库中数据,密码替换:
在这里插入图片描述
然后登陆路由方法

    public function login(Request $request) {
        // dd(bcrypt('12345'));
        $credentials = request(['email', 'password']);

        if (!$token = auth('api')->attempt($credentials)) {
            return $this->response->errorUnauthorized();
        }

        return $this->respondWithToken($token);
    }

     /**
     * Get the token array structure.
     *
     * @param  string $token
     *
     * @return \Illuminate\Http\JsonResponse
     */
    protected function respondWithToken($token)
    {
        return response()->json([
            'access_token' => $token,
            'token_type' => 'Bearer',
            'expires_in' => auth('api')->factory()->getTTL() * 60
        ]);
    }

在这里插入图片描述
postman中测试:
在这里插入图片描述
在这里插入图片描述
可以看到给我们成功返回token了,复制token,请求users带入:
在这里插入图片描述
可以看到也成功的请求回来需要认证的接口了。

4、根据token获取用户信息

    public function users() {
        // $users = User::all();
        // return $this->response->collection($users, new UserTransformer);

        // 从token获取用户信息
        $user = app('Dingo\Api\Auth\Auth')->user();
        return $user;
    }

在这里插入图片描述
在这里插入图片描述
还可以使用:

        $user = auth('api')->user();
        return $user;

在这里插入图片描述
在这里插入图片描述

在学习的路上,如果你觉得本文对你有所帮助的话,那就请关注点赞评论三连吧,谢谢,你的肯定是我写博的另一个支持

课程概述: 本课程是一个小型的vue周边技术+以php为基础的+微信接口开发的小型项目。本项目以微信扫码关注公众号实现网站自动登陆这一功能为载体,将会讲解如下主要核心知识点:前端你将学习到: 一、vue-cli4进行前端项目的创建 二、如何使用vuex进行登陆信息的管理与同步 三、如何使用axios进行接口请求的封装与拦截 四、在脚手架里使用Element-UI 五、学习组件化编程的思想 六、如何解决接口前后端分离引起的跨域问题以及在跨域下使用cookie凭证进行会话维护 后端你讲学习到: 一、如何申请微信公众号测试账号,如何进行相关参数的配置,如何进行微信相关接口的开发 二、如何使用微信接口开发,如获取临时二维码,获取用户基础信息,监听公众号关注以及扫描事件 三、如何使用redis对数据进行缓存 四、如何使用php原生代码进行接口的开发 五、如何使用laralvel 7.x 框架进行接口的开发 六、学习到laravel 中核心概念的使用方法,如什么是依赖注入,如何使用服务容器解决依赖注入、服务提供者、中间件的使用,如何处理请求数据,如何进行用户认证,以及如何使用Eloquent ORM进行数据库操作 七、开发过程中遇到的问题,如何进行排查 八、git远端仓库的建立与配置,如何在配置多仓库下的公钥,服务器端部署公钥的配置,如何进行代码部署,本地与服务器代码的开发实时同步 九、如何使用composer帮助我们进行第三方依赖包的安装 本课程的设计思路随笔: 从业务层面上来讲,扫码关注公众号,实现网站端自动登陆是一个非常实用的功能,可以为微信公众号引流。 技术层面上来说,使用前后端分离进行制作,可以将前端以及后端的知识都涵盖到。对于前端的路由,信息维护,脚手架的搭建,ui组件的使用,接口的请求与封装都能够讲解到。 对于后端,本课程对php原生代码以及工作中使用频率比较高的同时也很优雅的laravel框架都会进行讲解,分别予以代码的实现。让同学们能够看到原生开发与框架开发的区别,原生开发使得基础比较弱的同学能够慢慢上手,也知道此功能实现的核心要点,在进行原生代码开发后,再进行框架开发,会有个循序渐进的过程,同时在框架里面我们会降到主流框架都会用到的一些核心思想,比如依赖注入,服务容器,中间件等等,同时对于想学习laravel框架的同学,学习过这个案例后,再去看文档就知道该如何去看,如何去学了。 对于整个代码的管理与部署,我们也会引入git仓库进行项目代码管理,如何在服务器进行网站环境的搭建与代码部署等等实用技巧。 相信本课程会给大家带来十足的收获,大家加油。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

你华还是你华

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值