小程序+tp6实现token

小程序请求获取openid与token

wx.login({
      success (res) {
        console.log(res.code)
        if (res.code) {
          wx.request({
            url: '',
            data:{code:res.code},
            header:{
            //从缓存中获取token
              'token': wx.getStorageSync('token')
            },
            succ
            success(res){
              console.log(res)
              //把openid与token放入缓存中
              wx.setStorageSync('token', res.data.token)
            }
          })
        } else {
          console.log('登录失败!' + res.errMsg)
        }
      }
    })

第一步 安装jwt扩展

建议使用composer安装 方便 快捷

composer require firebase/php-jwt

使用中间件判断token

php think make:middleware Check
public function handle($request, \Closure $next)
    {
        //可以对域名携带参数进行判断
        if ($request->param('token')) {
//            return redirect('admin@one/index');
            $token = $request->param('token');
                $key='123';
                $status=array("code"=>2);
                try {
                    JWT::$leeway = 60;//当前时间减去60,把时间留点余地
                    $decoded = JWT::decode($token, $key, array('HS256')); //HS256方式,这里要和签发的时候对应
                    $arr = (array)$decoded;
          
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现登录功能需要以下步骤: 1. 创建一个小程序,包括登录页面和后台 API 接口。 2. 在小程序中使用 `wx.login()` 获取用户临时登录凭证 code,并将其发送到后台 API 接口。 3. 后台 API 接口使用 `code` 和小程序开发者密钥 `appid`、`secret` 调用微信提供的 API 接口获取用户的 `openid` 和 `session_key`。 4. 将获取到的 `openid` 保存到 MySQL 数据库中,并生成一个随机的 `token`,将其返回给小程序。 5. 小程序将 `token` 保存到本地,以后每次请求后台 API 接口时,都需要在请求头中带上 `token`。 6. 后台 API 接口在接收到请求时,从请求头中获取 `token`,并在 MySQL 数据库中查找对应的 `openid`,如果存在则说明用户已登录,否则返回未登录错误信息。 下面是具体的实现步骤: 小程序端代码: ```javascript // login.js Page({ login: function() { wx.login({ success: res => { wx.request({ url: 'http://localhost:3000/login', method: 'POST', data: { code: res.code }, success: res => { // 将token保存到本地 wx.setStorageSync('token', res.data.token) } }) } }) } }) // index.js Page({ onLoad: function() { wx.request({ url: 'http://localhost:3000/user', header: { 'token': wx.getStorageSync('token') }, success: res => { console.log(res.data) } }) } }) ``` 后台 API 接口代码: ```javascript const express = require('express') const app = express() const mysql = require('mysql') const request = require('request') // 创建 MySQL 连接池 const pool = mysql.createPool({ host: 'localhost', user: 'root', password: 'password', database: 'test' }) // 登录接口 app.post('/login', (req, res) => { const code = req.body.code const appid = 'your appid' const secret = 'your secret' // 调用微信 API 获取 openid 和 session_key request(`https://api.weixin.qq.com/sns/jscode2session?appid=${appid}&secret=${secret}&js_code=${code}&grant_type=authorization_code`, (err, response, body) => { const { openid, session_key } = JSON.parse(body) // 生成一个随机 token const token = Math.random().toString(36).substr(2) // 将 openid 和 token 保存到 MySQL 数据库中 pool.query('INSERT INTO user SET ?', { openid, token }, (err, result) => { if (err) throw err res.send({ token }) }) }) }) // 用户信息接口 app.get('/user', (req, res) => { const token = req.headers.token // 在 MySQL 数据库中查找对应的 openid pool.query('SELECT openid FROM user WHERE token = ?', [token], (err, result) => { if (err) throw err if (result.length === 0) { res.status(401).send('Unauthorized') } else { // 如果存在对应的 openid,则说明用户已登录 res.send('User Info') } }) }) app.listen(3000, () => console.log('Server started')) ``` 以上代码仅为示例,实际项目中需要根据具体需求进行修改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值