微信小程序入门之用户登陆态

本文详细介绍了微信小程序中如何实现用户登录流程,利用微信官方API获取临时登录凭证code,并通过后端服务器调用微信接口将code转换为session_key和openid。进一步地,文章展示了如何使用JSON Web Tokens (JWT)进行用户身份验证,确保了小程序与后端服务器间的安全通信。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

微信小程序的设定是不支持session,那么cookie之流肯定是用不了的。微信对wx.request这个API做了修改,小程序发起的请求并不是直接请求我们的后台服务器,而是先通过微信的服务器再发送到我们的后台服务器,既然请求都是要通过微信的服务器发送到我们的服务器,那么我们的服务器也就无从识别请求的发起者了。因此,session在微信小程序的后台开发中是无法使用的。

所以,我使用了比较流行的开发者服务端提供的token来识别用户身份。JSON WEB TOKEN。

登录流程时序

那么根据微信提供的业务流程走:

wx.login({

timeout: 3000 * 10,

success: res => {

if (res.code) {

//发起网络请求

wx.request({

method: 'POST',

url: 'XXXXXX',

data: {

code: res.code

},

success: res => {

var result = res;

wx.setStorageSync('info', result);//不属于开发者交互应该使用同步

}

})

} else {

console.log("获取code失败!");

}

}

})

 

TP5代码:

public function index()
    {
        $Request=Request::instance();
        
        $post=$Request->post();

        $url='https://api.weixin.qq.com/sns/jscode2session?appid='.$this->options['appId'].'&secret='.$this->options['appKey'].'&js_code='.$post['code'].'&grant_type=authorization_code';

        $con=json_decode($this->http_get($url),JSON_OBJECT_AS_ARRAY); 

        $token=json_encode($this->JWTtoken($con));
        
        $data=['session_key'=>$con['session_key'],'openid'=>$con['openid']];   
        Db::table('wx_user')->insert($data);

        exit($token);
        
    }

    public function http_get($url){
        $ch = curl_init($url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_HEADER, 0);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
        $con=curl_exec($ch);
        curl_close($ch);
        return $con;
    }

    public function JWTtoken($payload){
        $obj = new Jwt();

        $token=$obj->getToken($payload);
        
        return $token;
    }

这里有个地方要注意下,获取缓存的地方,是用同步还是用异步的问题,要搞清。如果要跟服务端交互就得异步,否则用同步写法跟微信服务端交互就可以获取或者储存到本地缓存。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值