引入Dingo API和JWT

1、在composer.json的require中添加

"require": {"dingo/api": "1.0.*@dev",
    "tymon/jwt-auth": "0.5.*"
}

2、执行composer update 引入新添加的包

配置Dingo API

1、配置provider

Dingo\Api\Provider\LaravelServiceProvider::class,

2、生成配置文件方便配置:

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

执行之后会在config文件夹中生成api.php配置文件,Dingo API 配置完成。

配置JWT

1、配置provider

Tymon\JWTAuth\Providers\JWTAuthServiceProvider::class

2、配置aliases

        'JWTAuth' => Tymon\JWTAuth\Facades\JWTAuth::class,'JWTFactory' => Tymon\JWTAuth\Facades\JWTFactory::class

3、生成配置文件

php artisan vendor:publish --provider="Tymon\JWTAuth\Providers\JWTAuthServiceProvider"

执行之后会在config文件夹中生成jwt.php配置文件

4、生成秘钥

php artisan jwt:generate

至此Dingo API 和 JWT引入完成。

配置Dingo API

在.env中添加一下配置:

API_STANDARDS_TREE=vnd
API_PREFIX=api
API_VERSION=v1
API_DEBUG=true

Dingo API的配置文件api.php中添加以下配置:

'auth' => [ // 配置Dingo API JWTbasic' => function($app){return new Dingo\Api\Auth\Provider\Basic($app['auth']);},'jwt' => function($app){return new Dingo\Api\Auth\Provider\JWT($app['Tymon\JWTAuth\JWTAuth']);}],

在Kernel中的routeMiddleware中添加以下配置:

'jwt.auth' => Tymon\JWTAuth\Middleware\GetUserFromToken::class,
'jwt.refresh' => Tymon\JWTAuth\Middleware\RefreshToken::class,

Dingo API和JWT引入和配置都完成了。

配置Dingo API路由

//接管路由
$api = app('Dingo\Api\Routing\Router');
// 配置api版本和路由
$api->version('v1', ['namespace' => 'App\Api\Controllers\V1'], function ($api) {
  $api->get('lesson', 'LessonController@index')->name('auth.register');
);

此时可以使用 php aritsan api:route 查看api路由

创建BaseController use Dingo API的trait

namespace App\Api\Controllers\V1;use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Dingo\Api\Routing\Helpers;class BaseController extends Controller
{use Helpers;
}

其他的控制器继承了BaseController就可以使用Dingo APIq强大的功能了

使用Transformer

在实际开发中,可能你想要返回的json尽可能的和数据库的不一致,这时可以使用Dingo API的transformer

定义每个模型对应的Transformer,每个transformer继承自TransformerAbstract (use League\Fractal\TransformerAbstract;);

<?php
namespace App\Api\Transformers;
use App\Lesson;
use League\Fractal\TransformerAbstract;class LessonTransformer extends TransformerAbstract{public function transform(Lesson $lesson){return ['title'  => $lesson['title'],'content'  => $lesson['body'],'is_free'  => $lesson['free'],];}
}

对应的控制器的写法

<?phpnamespace App\Api\Controllers\V1;use Illuminate\Http\Request;
use App\Lesson;
use App\Api\Transformers\LessonTransformer;
class LessonController extends BaseController
{public function index(){$lessons = Lesson::all();return $this->collection($lessons,new LessonTransformer());  //Dingo API的collection方法}}

使用JWT

新建AuthController继承BaseController

public function authenticate(Request $request){// grab credentials from the request$credentials = $request->only('email', 'password');try {// attempt to verify the credentials and create a token for the userif (! $token = JWTAuth::attempt($credentials)) {return response()->json(['error' => 'invalid_credentials'], 401);}} catch (JWTException $e) {// something went wrong whilst attempting to encode the tokenreturn response()->json(['error' => 'could_not_create_token'], 500);}// all good so return the tokenreturn response()->json(compact('token'));}

路由:

  $api->post('user/login','AuthController@authenticate')->name('auth.login');

用户成功登陆之后会返回一个token,如果我们把其他的路由放在jwt.auth的middleware的时候,此时的所有访问都要带着正确的token才可以访问。

  

转载于:https://www.cnblogs.com/lindoubao/p/7379726.html

Laravel配置DingoAPI和JWT相关推荐

  1. Laravel使用Dingo API+JWT实现认证机制 无痛刷新Token

    Laravel使用Dingo API+JWT实现认证机制 无痛刷新Token 一.安装[Dingo API](https://github.com/dingo/api) 和 [JWT](https:/ ...

  2. php为什么需要配置路由器,laravel 配置路由 api和web定义的路由的区别详解

    1.路由经过中间件方面不同 打开kerenl.php就可以看到区别 protected $middlewareGroups = [ 'web' => [ \App\Http\Middleware ...

  3. ThinkSNS+在研发过程中,如何做到 Laravel 配置可以网站后台...

    什么是ThinkSNS+ ThinkSNS(简称TS),一款全平台综合性社交系统,为国内外大中小企业和创业者提供社会化软件研发及技术解决方案,目前最新版本为ThinkSNS+.ThinkSNS V4. ...

  4. laravel配置路由会报404 Not Found

    laravel配置路由会报404 Not Found 故障现象: 例如:配置了测试路由,正常访问"域名/user",应该返回"路由测试", Route::get ...

  5. laravel和dingoapi的结合使用

    dingoapi是一个laravel的开源插件,可以在github上搜索到,现在在做一个项目,项目中总是会有后端跟前端的json数据交互,而这个dingoapi为json交互提供了很大的便利. 先安装 ...

  6. laravel 5.5 整合 jwt 报错Method Tymon\JWTAuth\Commands\JWTGenerateCommand::handle() does not exist解决...

    今天介绍一个在laravel5.5新版本整合jwt  执行 php artisan jwt:generate 再生成密钥时报的一个错误 Method Tymon\JWTAuth\Commands\JW ...

  7. laravel 配置微信公众号时{errcode:-106,errmsg:token check fail}

    一.问题描述 做微信授权登录时,遇到的一个坑,提示配置失败,F12,响应为 errcode":-106,"errmsg":"token check fail 二 ...

  8. Laravel配置自带组件实现各类型邮件发送功能的代码实例

    本篇文章主要讲解laravel自带的邮件组建配置和应用说明. 版本:laravel5.8+ 步骤一.配置env文件 MAIL_DRIVER=smtp MAIL_HOST=smtp 地址 MAIL_PO ...

  9. Laravel 配置

    首页 问答社区 中文文档 API Composer Github 配置说明 框架下载好了,但是想要很好的使用,可能我们还有一些东西需要知道,这就是配置.和项目有关的配置是在 app/config 文件 ...

  10. laravel配置加解密

    基于安全考虑,我们php项目配置文件中密码应该是加密的,laravel中也提供了OpenSSL 的 AES-256-CBC 来进行加密 但是如果我们项目配置的是其他加密方式,且希望以最少的改动实现读取 ...

最新文章

  1. Latex中数学公式中常用符号(持续更新)
  2. <笔记1>matplotlib绘图工具笔记
  3. Android 之 沉浸式状态栏及顶部状态栏背景色设置
  4. report service常见处理办法
  5. python中的for语句涉及的序列可以是列表_Python中的列表与循环
  6. 【深度学习】Swin-Transformer和EfficientNet对比分析
  7. Resharper 的快捷键
  8. 2.在某应用软件中需要记录业务方法的调用日志,在不修改现有业务类的基础上为每一个类提供一个日志记录代理类,在代理类中输出日志,例如在业务方法 method() 调用之前输出“方法 method() 被
  9. ASP.NET MVC3数据绑定到VIEW的方式
  10. leetcode1306. 跳跃游戏 III(bfs)
  11. mysql存储过程触发器游标_MySQL存储过程,触发器,游标
  12. 【LeetCode笔记】263. 丑数(Java、迭代)
  13. mysql常用操作指令总结
  14. word之八大文本替换技巧
  15. 查询表授权给谁了_SQL Server 全局临时表竞争条件漏洞利用
  16. Cortex-M0(3)---ARM Cortex-M0 异常与中断
  17. EXCEL 求解线性规划问题
  18. mybatis where 标签使用
  19. 【分享】常用JS(2)
  20. php机房图形资产管理系统,机房资产管理系统(CMDB)

热门文章

  1. 全网首发:JAVA的+=类算符,带有自动类型转换功能
  2. 人工搜索文字不可靠,还是要使用工具
  3. JDK数字格式,由星期几变为周几
  4. 高铁:繁忙时限制上车补票
  5. LINUX下system和execl有什么差异?
  6. 管理感悟:能图像不文字
  7. 苹果被拒:Guideline 5.0 - Legal
  8. ios 获取最后一个cell_ios – UICollectionView estimatedItemSize – 最后一个单元格未对齐...
  9. 出现画面抖动_手机拍照时模糊,抖动?赶紧来拯救你的拍摄技术吧!
  10. C# 获取结构体长度 指针转结构体 指针转结构体数组