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

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

Laravel  /  管理员 发布于 5年前   944

接上篇微信小程序后端搭建:分享: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 11.15版本发布 - Eloquent Builder中添加的泛型(0个评论)
    • Laravel 11.14版本发布 - 新的字符串助手和ServeCommand改进(0个评论)
    • Laravel 11.12版本发布 - Artisan的`make`命令自动剪切`.php `扩展(0个评论)
    • Laravel的轻量型购物车扩展包:binafy/laravel-cart(0个评论)
    • Laravel 11.11版本发布 - 查看模型中的第三方关系:show(0个评论)
    • 近期文章
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(0个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 欧盟关于强迫劳动的规定的官方举报渠道及官方举报网站(0个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf文件功能(0个评论)
    • Laravel从Accel获得5700万美元A轮融资(0个评论)
    • 在go + gin中gorm实现指定搜索/区间搜索分页列表功能接口实例(0个评论)
    • 在go语言中实现IP/CIDR的ip和netmask互转及IP段形式互转及ip是否存在IP/CIDR(0个评论)
    • PHP 8.4 Alpha 1现已发布!(0个评论)
    • Laravel 11.15版本发布 - Eloquent Builder中添加的泛型(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 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
    • 2023-04
    • 2023-05
    • 2023-06
    • 2023-07
    • 2023-08
    • 2023-09
    • 2023-10
    • 2023-11
    • 2023-12
    • 2024-01
    • 2024-02
    • 2024-03
    • 2024-04
    • 2024-05
    • 2024-06
    • 2024-07
    Top

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

    侯体宗的博客