首页
统计
友链
留言
Search
1
Windows下搭建Laravel开发环境~homestead
2,890 阅读
2
php解答leetcode第7题- 整数反转
2,822 阅读
3
基于php的sphinx和coreseek全文搜索,中文分词(一)
2,686 阅读
4
Laravel 安装 jwt 及基本使用
2,523 阅读
5
php解答leetcode第26题-删除排序数组中的重复项
2,015 阅读
PHP
laravel
svn
nginx
leetcode
算法
Golang
登录
Search
标签搜索
设计模式
leetcode
laravel
sphinx
coreseek
全文搜索
中文分词
compsoer
svn
centos
jwt
homestead
算法
php
yangpanyao
累计撰写
45
篇文章
累计收到
78
条评论
首页
栏目
PHP
laravel
svn
nginx
leetcode
算法
Golang
页面
统计
友链
留言
搜索到
1
篇与
jwt
的结果
2019-08-29
Laravel 安装 jwt 及基本使用
什么是jwt?JSON Web Token(JWT)是一个开放标准(RFC 7519),它定义了一种紧凑且独立的方式,用于在各方之间作为JSON对象安全地传输信息。此信息可以通过数字签名进行验证和信任。JWT可以使用秘密(使用HMAC算法)或使用RSA或ECDSA的公钥/私钥对进行签名。jwt简介链接 https://jwt.io/introduction/我们在做api请求的时候,通常要使用token,来验证是否这个请求能不能访问。一旦用户登录,后续每个请求都将包含JWT,允许用户访问该令牌允许的路由、服务和资源。单点登录是现在广泛使用的JWT的一个特性,因为它的开销很小,并且可以轻松地跨域使用。本文中所使用的版本Laravel 5.5jwt-auth 1.0.0-rc.1(在安装中也参考了很多文章 其他版本一直配置的不太顺利,这个版本比较好点)开始安装jwt(本次安装不建议直接在项目中安装及使用)1.composer 安装jwtcomposer require tymon/jwt-auth 1.0.0-rc.12.在config 文件夹的app.php 中注册服务提供者'providers' => [ Tymon\JWTAuth\Providers\LaravelServiceProvider::class, ] 'aliases' => [ 'JWTAuth'=> Tymon\JWTAuth\Facades\JWTAuth::class, 'JWTFactory'=> Tymon\JWTAuth\Facades\JWTFactory::class, ]3.生成配置文件php artisan vendor:publish --provider="Tymon\JWTAuth\Providers\LaravelServiceProvider"4.生成jwt 密钥php artisan jwt:secret然后会在我们的 .env 文件中生成jwt密钥5.在auth.php 文件中 配置 auth guard 让api的driver使用jwt'guards' => [ 'web' => [ 'driver' => 'session', 'provider' => 'users', ], 'api' => [ 'driver' => 'jwt',//更改此处为jwt 'provider' => 'users', ], ],6.更改 User model使其支持 jwt-auth<?php namespace App; use Tymon\JWTAuth\Contracts\JWTSubject; use Illuminate\Notifications\Notifiable; use Illuminate\Foundation\Auth\User as Authenticatable; class User extends Authenticatable implements JWTSubject { use Notifiable; protected $table = 'users'; /** * 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 []; } 7.配置 中间件 在 Middleware 文件夹下新建 ApiAuth.php 中间件文件<?php namespace App\Http\Middleware; use Closure; use Tymon\JWTAuth\Facades\JWTAuth; use Tymon\JWTAuth\Exceptions\JWTException; use Tymon\JWTAuth\Exceptions\TokenExpiredException; use Tymon\JWTAuth\Exceptions\TokenInvalidException; class ApiAuth { /** * Handle an incoming request. * * @param \Illuminate\Http\Request $request * @param \Closure $next * @return mixed */ public function handle($request, Closure $next) { try { if (! $user = JWTAuth::parseToken()->authenticate()) { //获取到用户数据,并赋值给$user return response()->json([ 'errcode' => 1004, 'errmsg' => '无此用户' ], 404); } return $next($request); } catch (TokenExpiredException $e) { return response()->json([ 'errcode' => 1003, 'errmsg' => 'token 过期' , //token已过期 ]); } catch (TokenInvalidException $e) { return response()->json([ 'errcode' => 1002, 'errmsg' => 'token 无效', //token无效 ]); } catch (JWTException $e) { return response()->json([ 'errcode' => 1001, 'errmsg' => '缺少token' , //token为空 ]); } } }注册中间件 在 Kernel.php 中注册中间件 并设置别名 protected $routeMiddleware = [ 'api.auth' => \App\Http\Middleware\ApiAuth::class, ];到此你的jwt就算安装配置完成了基本使用1.新建AuthCtorller.php 控制器php artisan make:controller AuthController2.编辑 测试控制器<?php namespace App\Http\Controllers; use App\User; use Illuminate\Http\Request; use Tymon\JWTAuth\Facades\JWTAuth; use Illuminate\Support\Facades\Hash; class AuthController extends Controller { /** * jwt 测试 */ //登录 public function login(Request $request){ $username = $request->get('username'); $password = $request->get('password'); $user_mes = User::where('username','=',$username)->first(); if (!$user_mes || !Hash::check($password, $user_mes->password)) { return "账号或密码错误"; } $token=JWTAuth::fromUser($user_mes);//生成token if (!$token) { return "登录失败,请重试"; } return response()->json(['token'=>$token]); } //获取用户信息 public function home(){ $user=JWTAuth::parseToken()->touser();//获取用户信息 return $user; } //退出 public function logout(){ JWTAuth::parseToken()->invalidate();//退出 return '退出成功'; } } 3.编辑路由<?php Route::post('/login','AuthController@login');//登录 Route::group(['middleware' => 'api.auth'], function () { Route::post('/home','AuthController@home');//获取用户信息 Route::post('/logout','AuthController@logout');//退出 });4.开始测试测试登录 /api/login 这里就成功的拿到了token获取用户信息 /api/home退出 /api/logout再次访问 /api/home 就会发现token 无效其他 - 设置token 永不过期在jwt.php 中 找到此处把过期时间设置为null在这个地方删除exp 即可设置token 永不过期
2019年08月29日
2,523 阅读
1 评论
0 点赞