0
点赞
收藏
分享

微信扫一扫

微信小程序 授权登录

萍儿的小确幸 2022-02-16 阅读 87

1.获取用户code 传入后台 

2.后台(php)中接收参数验证  第三方获取openid以及 session_key ,openid

验证数据库是否存在该用户 如果存在 则修改session_key 不存在则新增用户。

public function wxLogin(Request $request)
    {
        //code
        $code = $request->get('code');
        $nick_name = $request->get('nick_name');
        $avatar_url = $request->get('avatar_url');
        $appid = '微信平台获取';
        $appsecret = '微信平台获取';
        $url = "https://api.weixin.qq.com/sns/jscode2session?appid={$appid}&secret={$appsecret}&js_code={$code}&grant_type=authorization_code";
        //返回openid 以及 session_key 并解码 否则无法取出数据
        $userInfo = json_decode(file_get_contents($url),true);
        $userInfo['nickname'] = $nick_name;
        $userInfo['avatar'] = $avatar_url;

        //通过openid查询表中是否有数据  有则更新session_key 无则添加数据入库
        $data = Rentings::where('openid',$userInfo['openid'])->first();
        //dd($data['id']);die();
        if ($data)
        {
            //有数据修改session_key
            Rentings::where('openid',$userInfo['openid'])->update(['session_key'=>$userInfo['session_key']]);
        }else{
        //没有数据新增用户
            $createResult = Rentings::createData($userInfo);
            $userInfo['user_id'] = $data['id'];
        }
        //生成token
        $token = BaseController::createToken($data['id']);

        $userData['user_id'] = $data['id'];
        $userData['token'] = $token;

        return json_encode(['code'=>200,'msg'=>'成功','data'=>$userData]);
    }

3.生成token 并返回 前端存入session

composer下载JWT

composer require lcobucci/jwt 3.3

4.创建BaseController控制器 写入 生成token以及验证解码token的方法

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Lcobucci\JWT\Builder;
use Lcobucci\JWT\Parser;
use Lcobucci\JWT\Signer\Hmac\Sha256;
use Lcobucci\JWT\ValidationData;

class BaseController extends Controller
{
    /**
     * @param null $uid
     * @return string
     * 生成token
     */
    public static function createToken($uid = null)
    {
        $signer = new Sha256();//加密规则
        $time = time();//当前时间

        $token = (new Builder())
            ->issuedBy('teacher')//签发人
            ->canOnlyBeUsedBy('student')//接收人
            ->identifiedBy('MarsLei', true) //标题id
            ->issuedAt($time)//发出令牌的时间
            ->canOnlyBeUsedAfter($time) //生效时间(即时生效)
            ->expiresAt($time + 3600) //过期时间
            ->with('uid', $uid) //用户id
            ->sign($signer, 'my') //签名
            ->getToken(); //得到token
        return (string)$token;
    }

    /**
     * @param null $token
     * @return int|mixed
     * 验证token
     */
    public static function verifyToken($token=null){
        //检测是否接收到了token
        if(empty($token)){
            return 0;
        }
        //转化为可以验证的token
        $token = (new Parser())->parse((string) $token);
        //验证基本设置
        $data = new ValidationData();
        $data->setIssuer('teacher');
        $data->setAudience('student');
        $data->setId('MarsLei');

        if(!$token->validate($data)){
            return 0;
        }
        //验证签名
        $signer = new Sha256();
        if(!$token->verify($signer, 'my')){
            return 0;
        }
        //验证通过,返回用户id
        return $token->getClaim('uid');
    }

}


 

举报

相关推荐

0 条评论