laravel 接口授权之jwt

简介

Json web token (JWT)是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC 7519).该token被设计为紧凑且安全的,特别适用于分布式站点的单点登录(SSO)场景。JWT的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从资源服务器获取资源,也可以增加一些额外的其它业务逻辑所必须的声明信息,该token也可直接被用于认证,也可被加密。

构成

第一部分我们称它为头部(header),第二部分我们称其为载荷(payload, 类似于飞机上承载的物品),第三部分是签证(signature).

安装

composer require tymon/jwt-auth 0.5.*

配置

在config/app.config 的 providers中注册服务提供者:

Tymon\JWTAuth\Providers\JWTAuthServiceProvider::class

然后在aliases中注册需要用到的对应门面:

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

然后发布相应配置文件:

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

最后生成密钥:
php artisan jwt:generate

使用

1,登录授权
public function login(Request $request)
{
    //验证
    $validate = \Validator::make($request->all(),[
        'phone'     => 'required|string|mobile|max:255|exists:users',
        'password'  => 'required|string|min:6'
    ],[],[
        'phone'     => '手机号',
        'password'  => '密码有误'
    ]);

    if($validate->fails()){
        return $this->fail(ApiCode::PARAM_ERROR,$validate->errors()->first());
    }

    //手动登录
    if(\Auth::attempt(['phone'=>$request->get('phone'),'password'=>$request->get('password')])){

        $token = JWTAuth::fromUser(Auth::user());

        $user_id = Auth::user()['id'];

        return $this->success('登录成功!',compact('token'));
    }else{

        return $this->fail(ApiCode::AUTH_FAIL,'验证失败!');
    }

}
2,路由中间件

对需要jwt认证授权的接口加上jwt.auth中间件。
若需要jwt 生成的token每次都刷新,只需加上jwt.refresh中间件即可。

3,用户token认证

用户登录成功之后,下一步就是发送一个包含token的请求来获取用户信息。

要通过http发送一个需要认证通过的请求,需要设置Authorization头:

Authorization: Bearer {yourtokenhere}

或者直接在http请求地址后面加上token参数

http://192.168.0.147/partner/test?token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOjEwMDU2LCJpc3MiOiJodHRwOi8vMTkyLjE2OC4wLjE0Ny9sb2dpbiIsImlhdCI6MTUwMzY1NTY0MywiZXhwIjoxNTAzNjU5MjQzLCJuYmYiOjE1MDM2NTU2NDMsImp0aSI6Im9Zb0Z5d01ybEdFU3BKTGIifQ.JSiVFeVPLsmrqu9B1Suquz-P5HubyXsvHIIiy0-63H8&val1=1&val2=2
4,token 过期刷新

jwt token 过期时间在jwt.config 中设置
ttl 表示token过期时间。
refresh_ttl 表示token过期后有效的刷新时间。

刷新token代码如下:

public function refresh(Request $request)
{
    $oldToken = JWTAuth::getToken();

    if(!$oldToken){
        return $this->fail(ApiCode::PARAM_ERROR,'您的token有误!');
    }

    $token = JWTAuth::refresh($oldToken);

    return $this->success('刷新成功!',['token'=>$token]);
}

参考

http://www.jianshu.com/p/576dbf44b2ae
http://laravelacademy.org/post/3640.html
课程目录: 章节1:课前准备 课时1Laravel版本的选择05:46 课时2本地开发环境的搭建07:50 课时3本地域名解析08:40 课时4git的简单介绍08:53 课时5composer的安装和使用11:12 课时6课程源码同步08:14 课时7PHPStorm插件的安装05:44 课时8项目开发流程介绍03:19 章节2aravel基础入门 课时9Laravel的安装以及安装过程中常见问题24:40 课时10Laravel入门介绍08:46 课时11Laravel基本路由27:51 课时12Laravel路由参数32:25 课时13Laravel中间件22:43 章节3:项目模块设计和模板的引入 课时14模板的分离与blade布局模板03:12 课时15功能模块设计03:59 课时16后台控制器的创建与访问20:05 课时17后台模板的引入26:27 课时18前后台模板的获取34:33 章节4:后台-系统配置模板的开发 课时19创建站点配置页面23:57 课时20数据库连接和数据表的创建24:05 课时21网站配置信息写入数据表37:24 课时22完善网站配置(新手常见问题处理)18:59 课时23数据验证与数据闪存27:58 课时24完善系统配置功能27:59 课时25使用pjax提升后用户操作体验17:25 章节5:后台-新闻模块开发 课时26数据迁移与数据填充31:27 课时27新闻列表显示与新增36:33 课时28Laravel中的文件上传23:23 课时29富文本编辑器Neditor的使用28:56 课时30pjax下编辑器的异常处理10:07 课时31Laravel表单请求验证17:35 课时32新闻的编辑与删除34:48 课时33旧图片的处理和自定义公共函数16:10 章节6:无限级分类 课时34无限级分类原理33:06 课时35无限级分类的添加33:03 课时36无限级分类的删除与编辑20:21 课时37静态方法的正确使用07:56 课时38Laravel内置验证规则和自定义验证规则28:58 课时39提示信息的本地化11:34 章节7:后台-产品管理模块开发 课时40产品管理(1)27:23 课时41产品管理(2)-自定义验证规则25:42 课时42产品添加扩展内容14:41 课时43Laravel关联模型的使用21:33 课时44产品的编辑19:39 课时45产品编辑的完善07:13 课时46产品的批量删除与单条删除35:50 课时47使用Laravel模型事件完善产品删除功能18:37 章节8:后台-案例模块的开发 课时48数据表的创建和列表显示21:00 课时49案例的添加16:16 课时50案例的编辑与删除23:50 章节9:后台-单页模块开发 课时51单页模块(1)公司简介的处理32:11 课时52单页模块(2)招贤纳士功能实现35:00 课时53单页模块(3)发展历程的实现29:57 章节10:后台-轮播图模块开发 课时54轮播图模块表的设计与数据迁移09:19 课时55轮播图管理功能(1)20:59 课时56轮播图管理功能(2)32:43 课时57轮播图管理功能(3)自定义验证规则14:06 课时58问题处理21:57 课时59ajax实现异步排序19:42 课时60Laravel中访问器的使用11:42 课时61关于删除功能的扩展27:26 章节11:后台-友情连接模块开发 课时62友情连接模块开发28:07 章节12:后台权限认证 课时63管理员表的设计与创建15:46 课时64管理员登录验证的实现(1)25:11 课时65管理员登录验证的实现(2)23:59 章节13:前台 课时66前台首页的引入与布局模板21:01 课时67前台首页的数据调用(1)29:36 课时68前台首页的数据调用(2)16:51 课时69前台产品展示(1)23:35 课时70前台产品展示(2)15:31 课时71前台新闻数据调用17:50 课时72 Laravel自定义分页样式28:44 课时73前台新闻详情页04:33 课时74 前台案例展示11:37 课时75关于我们数据展示23:45 章节14:SEO优化入门 课时76常用的搜索引擎指令16:40 课时77SEO优化-标签优化11:46 课时78SEO优化-关键词优化08:14 课时79SEO优化-URL-robots优化07:43 课时80nofollow优化和图片优化16:43 课时81网站地图09:01 课时82链接优化与内容优化09:12 课时83百度推送(1)14:26 课时84百度推送(2)自定义类库(单例模式)27:28 课时85百度推送(3)21:13 课时86Laravel中Session的用法(百度推送优化)17:01 课时87蜘蛛来访36:09 课时88内容补充(纠错)05:18 章节15:网站安全 课时89网站安全介绍08:15 课时90上传漏洞介绍12:17 课时91常见攻击类型的防范方法06:15 课时92Laravel实现登录次数的限制19:20 课时93Laravel验证码的使用
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值