这里写自定义目录标题

  • 安装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中间件相关推荐

  1. 使用identity+jwt保护你的webapi(二)——获取jwt token

    前言 上一篇已经介绍了identity在web api中的基本配置,本篇来完成用户的注册,登录,获取jwt token. 开始 开始之前先配置一下jwt相关服务. 配置JWT 首先NuGet安装包: ...

  2. 微信开发 根据openid 获取用户基本信息

    1.官方文档 https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140839 2.我的核心代码 /*** 根据openid获 ...

  3. 微信小程序api.weixin.qq.com不能设置到白名单导致openid获取不到的解决方法

    app.js中的方法改为如下: //app.js App({ globalData: { userInfo: null, openid: null, }, onLaunch: function () ...

  4. java获取openid_JAVA获取微信小程序openid和获取公众号openid,以及通过openid获取用户信息...

    https://www.cnblogs.com/lxwt/p/10154540.html?tdsourcetag=s_pcqq_aiomsg 一,首先说明下这个微信的openid 为了识别用户,每个用 ...

  5. 通过微信用户的openid获取用户的头像,昵称,性别等信息

    一.使用access_token和openid.访问接口可以获取到用户信息 在关注者与公众号产生消息交互后,公众号可获得关注者的OpenID(加密后的微信号,每个用户对每个公众号的OpenID是唯一的 ...

  6. ThinkPHP6+JWT 中间件校验Token时效性

    一.涉及到的知识点 接口验签安全机制封装到服务层 接口调用须使用验签 接口验证封装到中间件 二.下载ThinkPHP6.0框架 如果你是第一次安装的话,在命令行下面,切换到你的WEB根目录下面并执行下 ...

  7. jwt token 附加用户信息_获取jwt(json web token)中存储的用户信息

    一个JWT实际上就是一个字符串,它由三部分组成,头部(header).载荷(Payload)与签名. Payload payload中可以保存用户的信息. var claims = new Claim ...

  8. 微信公众号现金红包红包 企业付款openid 获取

    微信公众号 必须是服务号和企业号 1.微信公众号 发红包  主要问题是要上传发红包的OpenID文件 2.企业付款openid 查询对方openid openid怎么获取 ,可以通过 "小C ...

  9. 微信H5端网页授权流程(在H5中的openid获取,网页绑定微信)

    说明:微信网页授权有两种 1.单独获取openid,属于静默获取,用于绑定微信(scope为snsapi_base) 2.获取用户的基本信息,需要用户点击同意(scope为snsapi_userinf ...

最新文章

  1. 应该增加黑样本还是白样本呢
  2. 6.19决战光荣日,一场魔兽狂欢里的青春、父爱和友谊
  3. VTK:PolyData之MeshQuality
  4. PageLayoutControl的基本操作
  5. select的一些问题。
  6. 指针和引用的区别和联系
  7. 【kafka】Kafka 2.0 ConsumerGroupCommand新功能
  8. 关于thymeleaf配置语法运用 以及 静态资源问题总结 2021-06-08
  9. js判断对象为空_在 JavaScript 中如何检查对象为空
  10. oracle 942出错,oracle升级后exp出现oracle942错误
  11. xor(线性基的合并)
  12. 免费生成十字绣字体_十字绣鞋垫图案 手工鞋垫历史长
  13. 当我们谈数据库时,是在谈什么?
  14. linux和windows下TIME_WAIT过多的解决办法
  15. prince2 成功的项目管理_我的PRINCE2故事
  16. SQL Server2008 附加数据库时出错
  17. 手写字体研究-matlab
  18. 计算机网络技术之局域网
  19. win7系统服务器角色向导,Windows Server2012入门-添加服务器角色和功能
  20. 【论文学习】Multi-modal Knowledge Graphs for Recommender Systems

热门文章

  1. Python-06 数据结构之列表
  2. ajax仿百度搜索效果,利用autocomplete.js实现仿百度搜索效果(ajax动态获取后端[C#]数据)...
  3. 初学Python可能会遇见的小知识
  4. 原生java读取properties与spring中@value、@ConfigurationProperties读取配置文件
  5. stm32 flymcu开始连接... 接收到:7F 7F 7F 7F 7F 7F以及无跳线帽短接方法
  6. Jess学习基础(一)
  7. 知+付费推广:我花3W烧出来的投放经验
  8. 《Java 后端面试经》Java 基础篇
  9. 用 Python 高效处理大文件
  10. PHP实现 网页图片上传