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

来源:脚本之家  责任编辑:小易  

把之前的代码上传到新的服务器,然后把域名解析到这个新服务器不就ok了吗www.zgxue.com防采集请勿采集本网。

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

主流的后端语言是php,因为维护比较好做,因为国内的后端php人才非常多;或者你用第三方的小程序制作平台搭建小程序,压根不需要懂技术。

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

需要有一个自己独立的服务器。和网站是一样的,只是前端的页面咋微信上而已。

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管理员];

开发版小程序 首先说一些开zd发版小程序需要的东西: 公众号(个人或者公司的均可、无需认证) 微信开发者工具 小程序模板(下面我会提供第三步:在微信开发者工具内用小程序模板制作微信小程序

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

<view class='padding-xl'> <button class='cu-btn margin-top bg-green shadow lg block' open-type="getUserInfo" bindgetuserinfo="login" disabled="{{isClick}}" type='success'> <text wx:if="{{isClick}}" class='cuIcon-loading2 iconfont-spin'></text> 微信登录</button></view>

1、首先在 index.js中想写逻辑代码。2、其中page里面的data里面是前台展示时的一些数据,而onload里面是调用的接口。3、调用的方式为get调用,返回的数据存在res里面。4、返回的数据,而data中就是我们需要的数据。5、data:一个入参。method:请求方式,如果是POST请求必须按上面写,默认是get请求,不用处理。complete:页面请求完成后的方法,通过that.setData将数据传递给WXML页面。success:页面加载成功后的执行方法内容来自www.zgxue.com请勿采集。


  • 本文相关:
  • laravel实现用户注册和登录
  • laravel 5框架学习之用户认证
  • laravel重写用户登录简单示例
  • laravel框架用户登陆身份验证实现方法详解
  • laravel实现用户多字段认证的解决方法
  • laravel5.5 实现后台管理登录的方法(自定义用户表登录)
  • 解决laravel5中auth用户登录其他页面获取不到登录信息的问题
  • laravel-admin 管理平台获取当前登陆用户信息的例子
  • laravel多用户认证系统示例详解
  • laravel6.2中用于用户登录的新密码确认流程详解
  • laravel用户授权系统的使用方法示例
  • laravel利用中间件防止未登录用户直接访问后台的方法
  • laravel 框架基于自带的用户系统实现登录注册及错误处理功能分析
  • php 结合 boostrap 结合 js 实现学生列表删除编辑及搜索功能
  • php将url地址转化为完整的a标签链接代码(php为url地址添加a标签)
  • php静态成员变量和非静态成员变量详解
  • 分享个简单易懂且非常有用的laravel事件
  • laravel实现orm带条件搜索分页
  • yii中cgridview实现批量删除的方法
  • php开发制作一个简单的活动日程表calendar
  • php防止表单重复提交实例讲解
  • yii实现checkbox复选框在同一行显示的方法
  • codeigniter+phpexcel实现导出数据到excel文件
  • 微信小程序给了后台接口,前端怎样调用
  • 微信小程序后端换服务器后在如何连接
  • 微信小程序需要后台吗?怎么搭建后台
  • 微信小程序后端服务器怎样与前端接上
  • 微信小程序怎么实现前端和后端实时通信
  • 微信小程序后端服务器怎样与前端接上
  • 以个人为主体的小程序,可以使用微信支付功能吗?
  • 微信小程序商城,前端PHP后端java,怎么部署呢?
  • 怎么自己做一个微信小程序
  • 怎么自己做一个微信小程序
  • 网站首页网页制作脚本下载服务器操作系统网站运营平面设计媒体动画电脑基础硬件教程网络安全php基础php技巧php实例php文摘php模板首页php编程php实例laravel实现用户注册和登录laravel 5框架学习之用户认证laravel重写用户登录简单示例laravel框架用户登陆身份验证实现方法详解laravel实现用户多字段认证的解决方法laravel5.5 实现后台管理登录的方法(自定义用户表登录)解决laravel5中auth用户登录其他页面获取不到登录信息的问题laravel-admin 管理平台获取当前登陆用户信息的例子laravel多用户认证系统示例详解laravel6.2中用于用户登录的新密码确认流程详解laravel用户授权系统的使用方法示例laravel利用中间件防止未登录用户直接访问后台的方法laravel 框架基于自带的用户系统实现登录注册及错误处理功能分析php 结合 boostrap 结合 js 实现学生列表删除编辑及搜索功能php将url地址转化为完整的a标签链接代码(php为url地址添加a标签)php静态成员变量和非静态成员变量详解分享个简单易懂且非常有用的laravel事件laravel实现orm带条件搜索分页yii中cgridview实现批量删除的方法php开发制作一个简单的活动日程表calendarphp防止表单重复提交实例讲解yii实现checkbox复选框在同一行显示的方法codeigniter+phpexcel实现导出数据到excel文件php获取数组长度的方法(有实例)微信公众平台实现获取用户openid教你如何使用php session使用php生成二维码的两种方法(带php发送get、post请求的6种方法简php中把stdclass object转array的微信公众平台网页授权获取用户基laravel框架数据库curd操作、连贯php删除数组中空值的方法介绍php字符串的连接的简单实例深入剖析浏览器退出之后php还会继续执行么laravel框架模板之公共模板、继承、包含实php定界符<<<使用技巧和实例php 使用curl模拟登录人人(校内)网的简单laravel框架邮箱认证实现方法详解php数组删除元素示例php创建多级目录完整封装类操作方法php 二维数组快速排序算法的实现代码thinkphp实现简单登陆功能thinkphp3.2.3框架memcache缓存使用方法实
    免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 帮助中心 - 频道导航
    Copyright © 2017 www.zgxue.com All Rights Reserved