tp6 openid获取 JWT中间件
这里写自定义目录标题
- 安装tp6 和配置
- wx login登录
- token使用
- 中间件使用
- 阿里云上传
- 小程序
安装tp6 和配置
1安装tp6:命令: composer create-project topthink/think tp
2 创建多应用模式安装扩展
composer require topthink/think-multi-app
3 快速生成模块应用 php think build demo
4 创建模块下的 控制器类php think make:controller index@Blog
wx login登录
1 控制器登录层
<?php
declare (strict_types = 1);namespace app\api\controller;use app\api\model\user as UserModel;
use app\api\server\Token as TokenServer;
use think\Request;class Login
{public function wxLogin(Request $request){//echo 1234;die();//获取code码$code = $request->get('code'); //var_dump($code);die();//获取微信授权url$url = sprintf(config('wx.url'),config('wx.AppID'),config('wx.AppSecret'),$code);//获取openid$data = curlGet($url);// var_dump($data);die();//进行查询数据库里面是否有该用户,如果没有,则进行新增$user = UserModel::where('openid',$data['openid'])->find();//如果没有用户进行创建if (empty($user)){$user = UserModel::create(['openid'=>$data['openid']]);}//生成token,保存用户登录状态$token = (new TokenServer())->generateToken($user->id);return json(['token'=>$token,'error_code'=>0,'msg'=>'登录成功']);//return json(['token'=>$token,'error_code'=>0,'msg'=>'登录成功','openid'=>$user['openid']]);}}
在模块下的common.php 文件里配置 系统自动生成的公共文件
<?php
// 这是系统自动生成的公共文件function curlGet($url){$headerArray =array("Content-type:application/json;","Accept:application/json");$ch = curl_init();curl_setopt($ch, CURLOPT_URL, $url);curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);curl_setopt($ch,CURLOPT_HTTPHEADER,$headerArray);$output = curl_exec($ch);curl_close($ch);$output = json_decode($output,true);return $output;
}
token使用
1安装jwt命令composer require firebase/php-jwt
2.在模块下创建server服务层:下的Token控制器:
<?phpnamespace app\api\server;use Firebase\JWT\JWT;class Token
{protected $salt;public function __construct(){$this->salt = config('jwt.salt');}/*** 生成token* @param $uid* @return mixed*/function generateToken($uid){//获取当前时间戳$currentTime = time();$data = array("iss" => 'keZuo', //签发者 可以为空"aud" => '', //面象的用户,可以为空"iat" => $currentTime, //签发时间"nbf" => $currentTime, //立马生效"exp" => $currentTime + 7200, //token 过期时间 两小时"data" => [ //记录的userid的信息,这里是自已添加上去的,如果有其它信息,可以再添加数组的键值对'uid' => $uid,]);//生成token$token = JWT::encode($data, $this->salt, "HS256"); //根据参数生成了 tokenreturn $token;}/*** 校验token时效性*/public function chekToken($token){$status=array("code"=>2);try {JWT::$leeway = 60;//当前时间减去60,把时间留点余地$decoded = JWT::decode($token, $this->salt, array('HS256')); //HS256方式,这里要和签发的时候对应$arr = (array)$decoded;$res['code']=1;$res['data']=$arr['data'];return $res;} catch(\Firebase\JWT\SignatureInvalidException $e) { //签名不正确$status['msg']="签名不正确";return $status;}catch(\Firebase\JWT\BeforeValidException $e) { // 签名在某个时间点之后才能用$status['msg']="token失效";return $status;}catch(\Firebase\JWT\ExpiredException $e) { // token过期$status['msg']="token失效";return $status;}catch(\Exception $e) { //其他错误$status['msg']="未知错误";return $status;}}}
创建config 的配置文件
jwt.php
<?php return [ 'salt'=>'a426bcc5f31e42527755afa13cc5f191' ];
wx.php
<?php
return['AppID' =>'wxf9c53e0a497cc457',//微信公众平台获取'AppSecret' => '47646ed2a1f74e056ab42cd6777cd500','url' => 'https://api.weixin.qq.com/sns/jscode2session?appid=%s&secret=%s&js_code=%s&grant_type=authorization_code'
];
中间件使用
1, 安装中间命令:
php think make:middleware Check
2middleware目录下的CheckToken.php文件下 配置
<?php
declare (strict_types = 1);namespace app\middleware;use app\api\server\Token as TokenServer;
use think\response\Json;class CheckToken
{/*** 处理请求** @param \think\Request $request* @param \Closure $next* @return Response*/public function handle($request, \Closure $next){//第一步先取token$token=$request->header('token');//jwt 进行校验token$res=(new TokenServer())->chekToken($token);if ($res['code']!=1){return json(['error_code'=>999,'msg'=>$res['msg'],'data'=>''],400);}$request->uid=$res['data']->uid;return $next($request);}
}
路由:
//分组路由 加中间件验证
Route::group(function (){//轮播图Route::get('slideshow','Slideshow/index');//文件上传wxuploadRoute::post('wxupload','Slideshow/upload');//查询房屋朝向属性Route::get('getFangAttr','Publish/getFangAttr');//发布出租的合租表单 AddSharedRoute::post('AddShared','Publish/AddShared');
})->middleware('check');//中间件验签
创建config 的配置文件
oss.php
<?phpreturn["accessKeyId"=>"LTAI5tGsyR7ppvCCFWw3Ykee","accessKeySecret"=>"MeQyMHXrKlnUK9nbtcUo4gm2i94p9j","bucket"=>"zhaochongbin","endpoint"=>"oss-cn-hangzhou.aliyuncs.com"
];
middleware.php
<?php
// 中间件配置
return [// 别名或分组'alias' => ['check' => [app\middleware\CheckToken::class],],// 优先级设置,此数组中的中间件会按照数组中的顺序优先执行'priority' => [],
];
阿里云上传
1 先安装,我使用composer安装
在项目的根目录运行 composer require aliyuncs/oss-sdk-php
2.在模块下创建server服务层:下的Oss控制器:
<?phpnamespace app\api\server;use OSS\OssClient;
use OSS\Core\OssException;class Oss
{public function uploadFile($filePath){// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。$accessKeyId = config('oss.accessKeyId');$accessKeySecret = config('oss.accessKeySecret');// Endpoint以杭州为例,其它Region请按实际情况填写。$endpoint = config('oss.endpoint');// 存储空间名称$bucket = config('oss.bucket');// <yourObjectName>上传文件到OSS时需要指定包含文件后缀在内的完整路径,例如abc/efg/123.jpg$fileName = date('Y-m-d', time()) . '/' . md5(time() . rand(1111, 9999999)) . '.png';try {$ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint);$result = $ossClient->putObject($bucket, $fileName, file_get_contents($filePath));} catch (OssException $e) {print $e->getMessage();}return $result['info']['url'];}
}
3,在控制器中;
<?php
declare (strict_types = 1);namespace app\api\controller;use app\api\model\Slideshow as SlideshowModel;
use app\api\server\Oss;class Slideshow
{//文件上传public function upload(){//echo 133;die();//要上传文件的临时路径$filePath = $_FILES['file']['tmp_name'];//阿里云上传对象存储$fileName = (new Oss())->uploadFile($filePath);return json(['code'=>200,'msg'=>'上传成功','url'=>$fileName]);}//查询轮播图public function index(){$data = SlideshowModel::select()->toArray();return json_encode($data);}}
小程序
存取Token
//缓存
wx.setStorageSync('token', token)
//取值
var tonken2 = wx.getStorageSync('token')console.log(tonken2);
带Token发送请求
wx.request({url: 'http://www.lianxi.com/api/slideshow',header:{'token':wx.getStorageSync('token')},success:res=>{this.setData({slideshow:res.data})}})
没了
tp6 openid获取 JWT中间件相关推荐
- 使用identity+jwt保护你的webapi(二)——获取jwt token
前言 上一篇已经介绍了identity在web api中的基本配置,本篇来完成用户的注册,登录,获取jwt token. 开始 开始之前先配置一下jwt相关服务. 配置JWT 首先NuGet安装包: ...
- 微信开发 根据openid 获取用户基本信息
1.官方文档 https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140839 2.我的核心代码 /*** 根据openid获 ...
- 微信小程序api.weixin.qq.com不能设置到白名单导致openid获取不到的解决方法
app.js中的方法改为如下: //app.js App({ globalData: { userInfo: null, openid: null, }, onLaunch: function () ...
- java获取openid_JAVA获取微信小程序openid和获取公众号openid,以及通过openid获取用户信息...
https://www.cnblogs.com/lxwt/p/10154540.html?tdsourcetag=s_pcqq_aiomsg 一,首先说明下这个微信的openid 为了识别用户,每个用 ...
- 通过微信用户的openid获取用户的头像,昵称,性别等信息
一.使用access_token和openid.访问接口可以获取到用户信息 在关注者与公众号产生消息交互后,公众号可获得关注者的OpenID(加密后的微信号,每个用户对每个公众号的OpenID是唯一的 ...
- ThinkPHP6+JWT 中间件校验Token时效性
一.涉及到的知识点 接口验签安全机制封装到服务层 接口调用须使用验签 接口验证封装到中间件 二.下载ThinkPHP6.0框架 如果你是第一次安装的话,在命令行下面,切换到你的WEB根目录下面并执行下 ...
- jwt token 附加用户信息_获取jwt(json web token)中存储的用户信息
一个JWT实际上就是一个字符串,它由三部分组成,头部(header).载荷(Payload)与签名. Payload payload中可以保存用户的信息. var claims = new Claim ...
- 微信公众号现金红包红包 企业付款openid 获取
微信公众号 必须是服务号和企业号 1.微信公众号 发红包 主要问题是要上传发红包的OpenID文件 2.企业付款openid 查询对方openid openid怎么获取 ,可以通过 "小C ...
- 微信H5端网页授权流程(在H5中的openid获取,网页绑定微信)
说明:微信网页授权有两种 1.单独获取openid,属于静默获取,用于绑定微信(scope为snsapi_base) 2.获取用户的基本信息,需要用户点击同意(scope为snsapi_userinf ...
最新文章
- 应该增加黑样本还是白样本呢
- 6.19决战光荣日,一场魔兽狂欢里的青春、父爱和友谊
- VTK:PolyData之MeshQuality
- PageLayoutControl的基本操作
- select的一些问题。
- 指针和引用的区别和联系
- 【kafka】Kafka 2.0 ConsumerGroupCommand新功能
- 关于thymeleaf配置语法运用 以及 静态资源问题总结 2021-06-08
- js判断对象为空_在 JavaScript 中如何检查对象为空
- oracle 942出错,oracle升级后exp出现oracle942错误
- xor(线性基的合并)
- 免费生成十字绣字体_十字绣鞋垫图案 手工鞋垫历史长
- 当我们谈数据库时,是在谈什么?
- linux和windows下TIME_WAIT过多的解决办法
- prince2 成功的项目管理_我的PRINCE2故事
- SQL Server2008 附加数据库时出错
- 手写字体研究-matlab
- 计算机网络技术之局域网
- win7系统服务器角色向导,Windows Server2012入门-添加服务器角色和功能
- 【论文学习】Multi-modal Knowledge Graphs for Recommender Systems
热门文章
- Python-06 数据结构之列表
- ajax仿百度搜索效果,利用autocomplete.js实现仿百度搜索效果(ajax动态获取后端[C#]数据)...
- 初学Python可能会遇见的小知识
- 原生java读取properties与spring中@value、@ConfigurationProperties读取配置文件
- stm32 flymcu开始连接... 接收到:7F 7F 7F 7F 7F 7F以及无跳线帽短接方法
- Jess学习基础(一)
- 知+付费推广:我花3W烧出来的投放经验
- 《Java 后端面试经》Java 基础篇
- 用 Python 高效处理大文件
- PHP实现 网页图片上传