微信小程序授权登录
需要的数据库字段:openid,nickName,session_key
在app\Http\Middleware\VerifyCsrfToken.php文件里面的
protected $except = [
//
"*", //
];
//
"*", //
];
需要加“*”,不然微信开发者工具报419错误
需要Token,去官网现在jwt的扩展
JSON Web Token Libraries - jwt.io
在app下面创建一个server目录
接着新建一个Token类
下面是封装Token的代码
<?php namespace App\server;
use Firebase\JWT\JWT;
use Firebase\JWT\Key;
use Firebase\JWT\Key;
class Token { //生成token public function setToken($uid,$times=3600){ $key = 'example_key'; $payload =[ 'uid'=>$uid, 'times'=>$times, ]; $token=JWT::encode($payload,$key,'HS256'); return $token; } //验证token public function getToken($token){ $key='example_key'; $decoded=JWT::deccode($token,new Key($key,'HS256')); return(array) $decoded; } }
创建一个控制器 php artisan make:controller WechatController
创建一个模型,连接登录表 php artisan make:model Login
下面数控制器的代码
public function login(Request $request){ $data=$request->post(); $code=$data['code']; //你的小程序appid $Appid=""; //你的小程序密钥 $AppSecret=""; $loginurl="https://api.weixin.qq.com/sns/jscode2session?appid=$Appid&secret=$AppSecret&js_code=$code&grant_type=authorization_code"; $res=json_decode(file_get_contents($loginurl),true); $login=[ 'openid' => $res['openid'], 'session_key'=>$res['session_key'], 'nickName'=>$data['nickName'], ]; //Login是你自己的模型 $url=Login::where('openid',$login['openid'])->first(); $token=Token::setToken(['openid',$login['openid']]); if (isset($url)){ return [ 'code' => 203, 'msg'=>'用户已存在', 'data'=>$token ]; }else{ DB::table('login')->insert($login); return [ 'code' =>200, 'data'=>$token, 'msg'=>'添加成功' ]; } }
小程序appid和密钥去官网找
https://mp.weixin.qq.com/wxamp/home
在左侧开发里面的开发管理,然后找开发设置,你的appid和密钥就在这里
给他一个路由,
//登录授权 Route::post('login',[\App\Http\Controllers\WechatController::class,'login']);
接下来是微信开发者工具里面的代码
login.wxml页面的代码
<button type="primary" bindtap="login" open-type="getUserProfile">授权登录</button>
login.js页面的代码
login(){ wx.getUserProfile({ desc: 'desc', success:(res)=>{ wx.login({ success: (halp) => { console.log(halp) let code=halp.code; let nickName=res.userInfo.nickName; wx.request({ url: 'http://www.week.com/login', method:'post', data:{code:code,nickName:nickName}, success:function(res){ wx.navigateTo({ url: '/pages/show/show' }) console.log(res) } }) }, }) } }) },
下面是效果图
因为我之前登录过,所以这边显示数据已存在,目前小程序完整的授权登录代码就是这些。