侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

Laravel 微信小程序后端实现用户登录的示例代码

Laravel  /  管理员 发布于 3年前   720

接上篇微信小程序后端搭建:分享:Laravel 微信小程序后端搭建

后端搭建好后第一件事就是用户登录认证,简单实现微信小程序登录认证

1.user 模型

use Laravel\Passport\HasApiTokens; 新增

use HasApiTokens, Notifiable;protected $fillable = [ 'id', 'name', 'email', 'email_verified_at', 'username', 'phone', 'avatar',//我用来把微信头像的/0清晰图片,存到又拍云上 'weapp_openid', 'nickname', 'weapp_avatar', 'country', 'province', 'city', 'language', 'location', 'gender', 'level',//用户等级 'is_admin',//is管理员];

2. 新增一条路由

//前端小程序拿到的地址:https://域名/api/v1/自己写的接口Route::group(['prefix' => '/v1'], function () {  Route::post('/user/login', 'UserController@weappLogin');});

3. 在 UserController 控制器里新建 function weappLogin (),别忘了 use 这些

use App\User;use Carbon\Carbon;use Illuminate\Http\Request;use Illuminate\Support\Facades\Storage;

写两个 function weappLogin (),avatarUpyun ()

public function weappLogin(Request $request)  {    $code = $request->code;    // 根据 code 获取微信 openid 和 session_key    $miniProgram = \EasyWeChat::miniProgram();    $data = $miniProgram->auth->session($code);    if (isset($data['errcode'])) {      return $this->response->errorUnauthorized('code已过期或不正确');    }    $weappOpenid = $data['openid'];    $weixinSessionKey = $data['session_key'];    $nickname = $request->nickname;    $avatar = str_replace('/132', '/0', $request->avatar);//拿到分辨率高点的头像    $country = $request->country?$request->country:'';    $province = $request->province?$request->province:'';    $city = $request->city?$request->city:'';    $gender = $request->gender == '1' ? '1' : '2';//没传过性别的就默认女的吧,体验好些    $language = $request->language?$request->language:'';    //找到 openid 对应的用户    $user = User::where('weapp_openid', $weappOpenid)->first();    //没有,就注册一个用户    if (!$user) {      $user = User::create([        'weapp_openid' => $weappOpenid,        'weapp_session_key' => $weixinSessionKey,        'password' => $weixinSessionKey,        'avatar' => $request->avatar?$this->avatarUpyun($avatar):'',        'weapp_avatar' => $avatar,        'nickname' => $nickname,        'country' => $country,        'province' => $province,        'city' => $city,        'gender' => $gender,        'language' => $language,      ]);    }    //如果注册过的,就更新下下面的信息    $attributes['updated_at'] = now();    $attributes['weixin_session_key'] = $weixinSessionKey;    $attributes['weapp_avatar'] = $avatar;    if ($nickname) {      $attributes['nickname'] = $nickname;    }    if ($request->gender) {      $attributes['gender'] = $gender;    }    // 更新用户数据    $user->update($attributes);    // 直接创建token并设置有效期    $createToken = $user->createToken($user->weapp_openid);    $createToken->token->expires_at = Carbon::now()->addDays(30);    $createToken->token->save();    $token = $createToken->accessToken;    return response()->json([      'access_token' => $token,      'token_type' => "Bearer",      'expires_in' => Carbon::now()->addDays(30),      'data' => $user,    ], 200);  }  //我保存到又拍云了,版权归腾讯所有。。。头条闹的  private function avatarUpyun($avatar)  {    $avatarfile = file_get_contents($avatar);    $filename = 'avatars/' . uniqid() . '.png';//微信的头像链接我也不知道怎么获取后缀,直接保存成png的了    Storage::disk('upyun')->write($filename, $avatarfile);    $wexinavatar = config('filesystems.disks.upyun.protocol') . '://' . config('filesystems.disks.upyun.domain') . '/' . $filename;    return $wexinavatar;//返回链接地址  }

微信的头像 / 0

小头像默认 / 132

4. 后端上面就写好了,再看下小程序端怎么做的哈,打开小程序的 app.json,添加 "pages/auth/auth",

{ "pages": [  "pages/index/index",  "pages/auth/auth",//做一个登录页面  "pages/logs/logs" ], "window": {  "backgroundTextStyle": "light",  "navigationBarBackgroundColor": "#fff",  "navigationBarTitleText": "WeChat",  "navigationBarTextStyle": "black" }, "sitemapLocation": "sitemap.json", "permission": {  "scope.userLocation": {   "desc": "你的位置信息将用于小程序位置接口的效果展示"  } }}

5. 打开 auth.js

const app = getApp();Page({ /**  * 页面的初始数据  */ data: {  UserData: [],  isClick: false, }, /**  * 生命周期函数--监听页面加载  */ onLoad: function(options) { }, login: function(e) {  let that=this  that.setData({   isClick: true  })  wx.getUserInfo({   lang: "zh_CN",   success: response => {    wx.login({     success: res => {      let data = {       code:res.code,       nickname: response.userInfo.nickName,       avatar: response.userInfo.avatarUrl,       country: response.userInfo.country ? response.userInfo.country : '',       province: response.userInfo.province ? response.userInfo.province : '',       city: response.userInfo.city ? response.userInfo.city : '',       gender: response.userInfo.gender ? response.userInfo.gender : '',       language: response.userInfo.language ? response.userInfo.language : '',      }      console.log(data)      app.globalData.userInfo = data;      wx.request({       url: '你的后端地址',//我用的valet,http://ak.name/api/v1/user/login       method: 'POST',       data: data,       header: {        'Content-Type': 'application/x-www-form-urlencoded'       },       success: function (res) {        console.log(res)        if (res.statusCode != '200') {         return false;        }        wx.setStorageSync('access_token', res.data.access_token)        wx.setStorageSync('UserData', res.data.data ? res.data.data : '')        wx.redirectTo({         url: '/pages/index/index',        })       },       fail: function (e) {        wx.showToast({         title: '服务器错误',         duration: 2000        });        that.setData({         isClick: false        })       },      });     }    })   },   fail: function (e) {    that.setData({     isClick: false    })   },  }) }})

6. 打开 auth.wxml

 

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

您可能感兴趣的文章:

  • Laravel 微信小程序后端搭建步骤详解


  • 上一条:
    微信小程序 CSS filter(滤镜)的使用示例详解
    下一条:
    Laravel 微信小程序后端搭建步骤详解
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • 在laravel框架中的5个HTTP客户端技巧分享(0个评论)
    • 在laravel项目中实现密码强度验证功能推荐扩展包:password-strength(0个评论)
    • Laravel Response Classes 响应类使用优化浅析(0个评论)
    • 在Laravel中使用FilePond上传文件及测试用例(0个评论)
    • 在laravel项目中第三方回调信息处理扩展包:flaky(0个评论)
    • 近期文章
    • 在laravel框架中的5个HTTP客户端技巧分享(0个评论)
    • 在go语言中使用FFmpeg库实现PCM音频文件编码为mp3格式文件流程步骤(0个评论)
    • gopacket免安装Pcap实现驱动层流量抓包流程步骤(0个评论)
    • 在laravel项目中实现密码强度验证功能推荐扩展包:password-strength(0个评论)
    • 在go语言中用filepath.Match()函数以通配符模式匹配字符串示例(0个评论)
    • Laravel Response Classes 响应类使用优化浅析(0个评论)
    • mysql中sql_mode的各模式浅析(0个评论)
    • 百度文心一言今天发布,个人第一批内测体验记录,不好别打我(0个评论)
    • 嘿加密世界让我们谈谈在共识中将中本聪主流化(0个评论)
    • 在go语言中寻找两个切片或数组中的相同元素/共同点/交集并集示例代码(0个评论)
    • 近期评论
    • 博主 在

      2023年国务院办公厅春节放假通知:1月21日起休7天中评论 @ xiaoB 你只管努力,剩下的叫给天意;天若有情天亦老,..
    • xiaoB 在

      2023年国务院办公厅春节放假通知:1月21日起休7天中评论 会不会春节放假后又阳一次?..
    • BUG4 在

      你翻墙过吗?国内使用vpn翻墙可能会被网警抓,你需了解的事中评论 不是吧?..
    • 博主 在

      go语言+beego框架中获取get,post请求的所有参数中评论 @ t1  直接在router.go文件中配就ok..
    • Jade 在

      如何在MySQL查询中获得当月记录中评论 Dear zongscan.com team, We can skyroc..
    • 2016-10
    • 2016-11
    • 2017-07
    • 2017-08
    • 2020-03
    • 2020-04
    • 2020-05
    • 2020-06
    • 2020-07
    • 2020-08
    • 2020-09
    • 2020-10
    • 2020-11
    • 2021-01
    • 2021-02
    • 2021-03
    • 2021-04
    • 2021-05
    • 2021-06
    • 2021-07
    • 2021-08
    • 2021-09
    • 2021-10
    • 2021-11
    • 2021-12
    • 2022-01
    • 2022-02
    • 2022-03
    • 2022-04
    • 2022-05
    • 2022-06
    • 2022-07
    • 2022-08
    • 2022-09
    • 2022-10
    • 2022-11
    • 2022-12
    • 2023-01
    • 2023-02
    • 2023-03
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客