"tymon/jwt-auth": "^1.0@dev",
执行 composer update
'providers' => [ .... Tymon\JWTAuth\Providers\LaravelServiceProvider::class, // 上文已经提到过,这里的provider已经不是JWTauthServiceProvider ], 'aliases' => [ .... 'JWTAuth' => Tymon\JWTAuth\Facades\JWTAuth::class ],
发布配置文件#
php artisan vendor:publish --provider="Tymon\JWTAuth\Providers\LaravelServiceProvider"
php artisan jwt:secret
/**
* Get the value of the model's primary key.
*
* @return mixed
*/
public function getKey()
{
return $this->getAttribute($this->getKeyName());
}
这个一般是得到id
调用Auth::guard('your jwt guard name')->attempt($credentials)
实际是调用了JWTGuard.php里面的attempt方法
oh yeah,终于生成了jwt token了
{"register_result1":"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOi8vbGFyYXZlbF9hcGkuYXBwL2FwaS9yZWdpc3RlciIsImlhdCI6MTUwMjM1NjE1MCwiZXhwIjoxNTAyMzU5NzUwLCJuYmYiOjE1MDIzNTYxNTAsImp0aSI6ImJSSHZsUXB5ZzN1WGtTR2MiLCJzdWIiOjksInBydiI6IjM3ODdmYmExNjE4YTkzMDUyNmFjYTZjOGJiOWI0NGI4M2YyOTc3MjYifQ.JpqCVjZggb2BHsCEXzITdnX70HbYIAfQY-iYSpkfHSw"}
$credentials我感觉不应该先用bcrypt,不然attempt会验证失败,只有插入数据库的时候才需要bcrypt
protected function getClaimsForSubject(JWTSubject $subject)
{
return [
'sub' => $subject->getJWTIdentifier(), //主键id
'prv' => $this->hashProvider($subject),
];
}
如何自定义customClaims
public function getJWTCustomClaims()
{
// TODO: Implement getJWTCustomClaims() method.
return ['key1' => 'elesos', 'key2' => 'test'];
}
上面是静态的,如何动态的加呢?
$client = DB::select('select * from clients where email = ?', [$email]);
//return $client;
//var_dump($client);return;//数组里面是对象元素
$customClaims = ['name' => $client[0]->name, 'vip_level' => '1'];
Auth::guard('client')->customClaims($customClaims);
接口如何访问
Route::get('/test1', function () {
return ['state' => 1, 'data' => 'sucess'];
})->middleware('auth:client');
或者
http://api.mysite.com/me?token={yourtokenhere}
验证token信息。
public function validate_test(){
//echo 'validate_test';
//$token = JWTAuth::getToken();
//return $token;
try {
if (! $user = JWTAuth::parseToken()->authenticate()) {
return response()->json(['user_not_found'], 404);
}
} catch (Tymon\JWTAuth\Exceptions\TokenExpiredException $e) {
return response()->json(['token_expired'], $e->getStatusCode());
} catch (Tymon\JWTAuth\Exceptions\TokenInvalidException $e) {
return response()->json(['token_invalid'], $e->getStatusCode());
} catch (Tymon\JWTAuth\Exceptions\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'));
}
下一步要实现错误时返回json,而不是错误页面
Add the following code to the render method within app/Exceptions/Handler.php
public function render($request, Exception $e) { if ($e instanceof Tymon\JWTAuth\Exceptions\TokenExpiredException) { return response()->json(['token_expired'], $e->getStatusCode()); } else if ($e instanceof Tymon\JWTAuth\Exceptions\TokenInvalidException) { return response()->json(['token_invalid'], $e->getStatusCode()); } return parent::render($request, $e); }
或全部
// 这是我自己错定义的错误
return response()->json(array('error_code' => $e->getStatusCode()));
// 这是默认的错误返回,已注释了
//return parent::render($request, $e);
return response()->json(['errcode' => 4000, 'errmsg' => $exception->getMessage()], 200);
开发环境,当 APP_DEBUG = true 时,使用默认错误页面;
生产环境,当 APP_DEBUG = false 时,使用自定义错误页面,异步请求返回json异常信息
修改app/Exceptions/Handler.php
  1. public function render($request, Exception $exception)
  2. {
  3. $debug = config('app.debug', false);
  4. if($debug) {
  5. return parent::render($request, $exception);
  6. }
  7. if ($exception instanceof HttpException) {
  8. $code = $exception->getStatusCode();
  9. $message = $exception->getMessage();
  10. if ($request->expectsJson()) {
  11. return response()->json(['error' => $message], $code);
  12. }
  13. if (view()->exists('errors.custom' . $code)) {
  14. return response()->view('errors.custom' . $code, ['message'=>$message], $code);
  15. }
  16. }
  17. return parent::render($request, $exception);
  18. }
已知laravel5的默认Exceptions\Handler会优先匹配404异常,所以建议在Handler进行处理。
修改app/Exceptions/Handler.php的render方法如下
/** * Render an exception into an HTTP response. * * @param \Illuminate\Http\Request $request * @param \Exception $exception * @return \Illuminate\Http\Response */ public function render($request, Exception $exception) { if (is_a($exception, \Symfony\Component\HttpKernel\Exception\NotFoundHttpException::class) && $request->expectsJson()) { return response()->json(['msg'=>'NotFound']); } else { return parent::render($request, $exception); } }

laravel学习之路2: jwt集成的更多相关文章

  1. springboot 学习之路 3( 集成mybatis )

    目录:[持续更新.....] spring 部分常用注解 spring boot 学习之路1(简单入门) spring boot 学习之路2(注解介绍) spring boot 学习之路3( 集成my ...

  2. springboot 学习之路 6(集成durid连接池)

    目录:[持续更新.....] spring 部分常用注解 spring boot 学习之路1(简单入门) spring boot 学习之路2(注解介绍) spring boot 学习之路3( 集成my ...

  3. laravel学习之路4artisan

    php artisan list php artisan help migrate Tinker 让你可以在命令行中与 Laravel 应用进行交互php artisan tinker 在routes ...

  4. laravel学习之路1:认证相关

    Laravel中Auth::guard()表示什么意思? Auth::check() 是判断用户是否登录的方法,如果使用的默认用户系统,那这样使用没问题. 但是使用两组用户的话,如何使用各组用户的功能 ...

  5. springcloud学习之路: (五) springcloud集成SpringCloudConfig分布式配置中心

    SpringCloud全家桶中的分布式配置中心SpringCloudConfig, 它使用git来管理配置文件, 在修改配置文件后只需要调用一个接口就可以让新配置生效, 非常方便. SpringClo ...

  6. laravel学习之路5缓存

    redis需要先安装 需要通过 Composer 安装 predis/predis 扩展包 (~1.0) 或者使用 PECL 安装 PhpRedis PHP 拓展. composer require ...

  7. laravel学习之路3 数据库相关

    读写分离之多个读? 有 'host' => $readHosts[array_rand($readHosts)], 上面的好像有缓存问题php artisan config:cache ] ); ...

  8. springcloud学习之路: (四) springcloud集成Hystrix服务保护

    Hystrix是一套完善的服务保护组件, 可以实现服务降级, 服务熔断, 服务隔离等保护措施 使用它可以合理的应对高并发的情况 做到保护服务的效果 1. 导入依赖 <dependency> ...

  9. springcloud学习之路: (三) springcloud集成Zuul网关

    网关就是做一下过滤或拦截操作 让我们的服务更加安全 用户访问我们服务的时候就要先通过网关 然后再由网关转发到我们的微服务 1. 新建一个网关服务Module 2. 依然选择springboot工程 3 ...

随机推荐

  1. 八. 输入输出(IO)操作5.面向字节流的应用

    文件输入输出流 文件输入输出流 FileInputStream 和 FileOutputStream 负责完成对本地磁盘文件的顺序输入输出操作. [例 10-5]通过程序创建一个文件,从键盘输入字符, ...

  2. MySQL集群---②Windows平台搭建MySQL CLUSTER集群

    原文:http://blog.csdn.net/mazhaojuan/article/details/42211857 本文将通过两台电脑来简单介绍一下Windows平台如何搭建MySQL集群. My ...

  3. [转]WCF RESTful service and WebGrid in ASP.NET MVC 5

    使用WebClient调用WCF服务 流程:从View获取实体类-->序列化-->写入内存流中-->传给远端的WCF服务 Get.POST.PUT.DELETE,客户端以流的方式调用 ...

  4. CM3大礼包

  5. Navicat 破解版的安装

    因为电脑系统换掉,重装系统,重新配置了一下环境,安装Navicat,现记录一下过程,以便下次查询使用. 我们首先百度搜索一款navicat for mysql然后进行下载. 2 当我们下载完成之后首先 ...

  6. [置顶] kubernetes资源类型--ingress

    Ingress在K8S1.1之前还没有. 概念 Ingress是一种HTTP方式的路由转发机制,为K8S服务配置HTTP负载均衡器,通常会将服务暴露给K8S群集外的客户端. Ingress是一个允许入 ...

  7. 设计模式之适配器模式(php实现)

    /* github地址:https://github.com/ZQCard/design_pattern * 适配器模式:将一个类的接口转换成客户希望的另外一个接口. * 适配器模式使得原本由于接口不 ...

  8. 在pos:a元素不设定宽度的情况下,他的最大宽度是受父元素的宽度所限制的。

    <div style="width:80px;height:50px;position:relative;left:50px;"> <ul style=" ...

  9. 机器学习入门之四:机器学习的方法--SVM(支持向量机)(转载)

    转自 飞鸟各投林 SVM(支持向量机) 支持向量机算法是诞生于统计学习界,同时在机器学习界大放光彩的经典算法. 支持向量机算法从某种意义上来说是逻辑回归算法的强化:通过给予逻辑回归算法更严格的优化条件 ...

  10. Asp.net问题集锦

    1.在Web应用开发中经常碰到这样的情况,Dropdownlist绑定的数据太多,用户要选择某一项必须从头找到尾,使用起来很不方便.最近我在工作中就碰到这种情况,公司内某个业务系统需要绑定几百条的厂家 ...