文章来源:https://blog.csdn.net/qq_28666081/article/details/52188549
展开
上一篇文章讲解了如何配置安装包(点击这里),接下来讲解如何使用

这里我的需求比较特殊,使用的model并不是App/User,所以需要进行指定---》参考文章点击这里

①新建数据库及其model

1. 新建migrate:

php artisan make:migration create_clients_table --create=clients
2. 新建model:
 php artisan make:model Client
然后修改model Client的继承类如下:

use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Database\Eloquent\Model;
 
/**
 * @property mixed user_pwd
 */
class Client extends Authenticatable
{
。。。。。。。。。。

3. 修改data/migrations/201x_xx_xx_xxxxxx_create_clients_table.php文件中的up方法如下:

public function up()
    {
        Schema::create('clients', function (Blueprint $table) {
            $table->increments('id');
            $table->string('user_email',50);
            $table->string('user_pwd',100);
            $table->string('user_name',50);
            $table->timestamps();
        });
    }
然后执行 php artisan migrate, 这样新的测试数据表就建好了。然后我们需要修改config/jwt.php中"user"=>"App\User"如下:
 'user' => 'App\Client',

②routes.php下添加dingo代码:

$api = app('Dingo\Api\Routing\Router');
$api->version('v1', function ($api) {
    $api->group(['namespace' => 'App\Api\Controllers','middleware' => ['client.change']], function ($api) {
        $api->post('user/login', 'AuthController@authenticate');  //登录授权
        $api->post('user/register', 'AuthController@register');
        $api->group(['middleware' => 'jwt.auth'], function ($api) {

//路径为 /api/tests
            $api->get('tests', 'TestsController@index');
            //请求方式:
            //http://localhost:8000/api/tests?token=xxxxxx  (从登陆或注册那里获取,目前只能用get)
            $api->get('tests/{id}', 'TestsController@show');
            $api->get('user/me', 'AuthController@AuthenticatedUser'); //根据
        });
    });
});
以上我们进行一个个添加对应的模块。
注:以上重点为(用于指定特定的model):

'middleware' => ['client.change']
该middleware的代码如下:
public function handle($request, Closure $next)
{
    config(['jwt.user' => '\App\Client']);    //重要用于指定特定model
    config(['auth.providers.users.model' => \App\Client::class]);//重要用于指定特定model!!!!

return $next($request);
}

③基础模块添加

首先在app目录下创建Api/Controllers及Api/Transformers目录,图如下:

然后在Controllers下创建BaseController.php 用于作为被继承的验证基础模块,代码如下:

<?php
 
namespace App\Api\Controllers;
 
use App\Http\Controllers\Controller;
use Dingo\Api\Routing\Helpers;
 
 
class BaseController extends Controller
{
    use Helpers;
 
    /****
     * BaseController constructor.
     */
    public function __construct()
    {
 
    }
}

④认证模块添加

认证模块分为登录、注册、获取用户信息 ,全部代码如下:

<?php
namespace App\Api\Controllers;
 
use App\Client;
use Illuminate\Http\Request;
use JWTAuth;
use Tymon\JWTAuth\Exceptions\JWTException;
use Tymon\JWTAuth\Exceptions\TokenExpiredException;
use Tymon\JWTAuth\Exceptions\TokenInvalidException;
 
 
class AuthController extends BaseController
{
    /**
     * The authentication guard that should be used.
     *
     * @var string
     */
    public function __construct()
    {
        parent::__construct();
 
    }
 
    /**
     * @param Request $request
     * @return \Illuminate\Http\JsonResponse
     */
    public function authenticate(Request $request)
    {
        $payload = [
            'user_email' => $request->get('email'),
            'password' => $request->get('password')
        ];
        try {
            if (!$token = JWTAuth::attempt($payload)) {
                return response()->json(['error' => 'token_not_provided'], 401);
            }
        } catch (JWTException $e) {
            return response()->json(['error' => '不能创建token'], 500);
        }
        return response()->json(compact('token'));
    }
 
    /**
     * @param Request $request
     */
    public function register(Request $request)
    {
        $newUser = [
            'user_email' => $request->get('email'),
            'user_name' => $request->get('name'),
            'password' => bcrypt($request->get('password'))
        ];
        $user = Client::create($newUser);
        $token = JWTAuth::fromUser($user);
        return $token;
    }
 
    /****
     * 获取用户的信息
     * @return \Illuminate\Http\JsonResponse
     */
    public function AuthenticatedUser()
    {
        try {
            if (!$user = JWTAuth::parseToken()->authenticate()) {
                return response()->json(['user_not_found'], 404);
            }
        } catch (TokenExpiredException $e) {
            return response()->json(['token_expired'], $e->getStatusCode());
        } catch (TokenInvalidException $e) {
            return response()->json(['token_invalid'], $e->getStatusCode());
        } catch (JWTException $e) {
            return response()->json(['token_absent'], $e->getStatusCode());
        }
        // the token is valid and we have found the user via the sub claim
        return response()->json(compact('user'));
    }
}
过程分析:
                 ①继承自BaseController.php,继承了dingo的操作方法
                 ②继承BaseController.php的构造函数,并用config改变其指定model

③到这里如果没有配置错误的话就是就是三个模块都可以正常运行了

⑤认证模块使用讲解

这里我们首先使用postman(不清楚搜下。一个谷歌插件)请求localhost:8000/api/user/register 注册接口:

然后请求    localhost:8000/api/user/login   请求如下图:

同样我们得到了一个新的token,这里说明每次登陆都会刷新token这样我们复制最新token,下面有用

接下来我们使用刚获取的最新个人信息

⑥token获取信息模块

⑤中最后一个获取个人信息模块也属于这里。。。下面主要讲解返回特定的数据格式

首先在Transformers目录下添加TestsTransformer.php文件代码如下:

<?php
 
namespace App\Api\Transformers;
 
/**该类为dingo api封装好**/
use League\Fractal\TransformerAbstract;
 
class TestsTransformer extends TransformerAbstract
{
    /***
     * 分开为了解耦
     * 数据字段选择
     * @param $lesson
     * @return array
     */
    public function transform($lesson)
    {
        /******隐藏数据库字段*****/
        return [
            'username' => $lesson['user_name'],
            'email' => $lesson['user_email'],
        ];
    }
}
注:这里继承了dingo的TransformerAbstract类

然后在Controllers目录下新建TestsController.php作为基础信息获取,代码如下:

<?php
namespace App\Api\Controllers;
 
 
use App\Api\Transformers\TestsTransformer;
use App\Client;
 
class TestsController extends BaseController
{
    public function index()
    {
        $tests = Client::all();
        return $this->collection($tests, new TestsTransformer());
    }
 
    public function show($id)
    {
        $test = Client::find($id);
        if (!$test) {
            return $this->response->errorNotFound('Test not found');
        }
        return $this->item($test, new TestsTransformer());
    }
}

注:这里引用了TestsTransformer作为数据格式,item为dingo自带函数,处理数据格式并返回
请求方式与⑤中请求localhost:8000/api/user/me?token=xxxxxxxxxxxxxxxxxxxx 一致,详情请求地址请看routes文件。

到此就讲完了Dingo+JWT接口开发了。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
————————————————
版权声明:本文为CSDN博主「Lidisam」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_28666081/article/details/52188549

Laravel实现dingo+JWT api接口之实战篇相关推荐

  1. php dingo和jwt,Laravel实现dingo+JWT api接口之配置篇

    尝试了下在简书写博客..结果一般如下: 废话不多说,直接进入----| 1. 安装拓展包 一.集成dingo ①在composer.json的require字段中添加:"dingo/api& ...

  2. vue项目:(全局变量设置与调用)API接口封装 - 代码篇

    vue项目,如何将"API接口" 封装为"全局变量" ? 1. API全局配置文件[global.vue文件] <template><div& ...

  3. 好用实用稳定的API接口【物流快递篇】

    先来科普个概念,开放应用程序的API(即Application Program Interface,应用程序接口)可以让开发者在无需访问源码,或理解内部工作机制细节的情况下,调用他人共享的功能和资源. ...

  4. 〖Python接口自动化测试实战篇⑩〗- 测试框架 unittest 的小实战案例

    说明:该文属于 Python全栈白宝书专栏,免费阶段订阅数量4300+,购买任意白宝书体系化专栏可加入TFS-CLUB 私域社区. 福利:除了通过订阅"白宝书系列专栏"加入社区获取 ...

  5. 企查查api接口批量操作实战

    最近博主因为工作需要,需要对一些企业的工商信息进行验证,想来也只有企查查能够提供这样的服务.但是第一次使用企查查的api还是很呆萌的,不过经过对api文档的理解(这里就不吐槽企查查的技术支持了,完全是 ...

  6. 〖Python接口自动化测试实战篇②〗- 摒弃 ‘捉虫师’ 称号 - 你需要重新认识软件测试

    万叶集

  7. 〖Python接口自动化测试实战篇①〗- 自动化测试基础扫盲及项目的生命周期详述

    万叶集

  8. 〖Python接口自动化测试实战篇③〗- 什么才是真正的自动化 - 自动化测试的意义又是什么?

    万叶集

  9. 〖Python接口自动化测试实战篇⑤〗- 接口自动化测试必备基础 - http协议

    万叶集

最新文章

  1. REST service 化一个数据系统(REST Service 的最佳实践,第 2 部分)
  2. vue指令:v-cloak渲染指令(v-cloak 指令是解决屏幕闪动的好方法)
  3. Atlas 配置高可用
  4. https 慢_dba+开源工具:可视化分析MongoDB慢查询日志
  5. 关于Python常见功能使用的博客收藏
  6. python写sql语句_如何在Python脚本中执行多个SQL语句?
  7. c++ opencv mat_OpenCV计算机视觉-Core组件(一)
  8. Clob,Blob,InputStream,byte 互转
  9. 按键手机java下载_经典按键java手机游戏
  10. python人名独特性统计_荐第六章:组合数据类型练习[人名独特性统计]学习思考...
  11. 程序员的十个层次 你属于哪一层?
  12. 小米平板2Android分区表,DIY:8G+128G双系统小米平板2
  13. windowsapps文件夹无法删除_Windows实战之快速安全删除Windows.old文件夹
  14. 三角函数公式合集——从诱导公式到求导公式
  15. Ubuntu下初装QT出现错误cannot find -lGL解决办法
  16. 使用Git管理多媒体文件
  17. e最著名的形容美女的词语
  18. 博客园屏蔽博文页面广告的方法
  19. 论文笔记2:Video-based Person Re-identification with Spatial and Temporal Memory Networks
  20. 2018暑假集训Day1

热门文章

  1. fiddler抓包,搞定接口
  2. 一正云系统服务器搭建,腾正云服务器
  3. 04以太坊测试网(Testnets)
  4. VUE3祖孙组件传值调用方法
  5. OAI搭建——硬件准备
  6. ES Module与CommonJS
  7. 台式机笔记本电脑平板电脑属于什么计算机,pc机属于什么计算机
  8. 智能硬件产品开发全流程解析
  9. 模拟电子技术-模拟集成电路
  10. 服务器响应请求状态码(详细版)