master
fengyuexingzi 7 years ago
parent 56fe101227
commit 599413c8d8

@ -6,9 +6,9 @@ use App\User;
use Carbon\Carbon;
use Illuminate\Foundation\Auth\AuthenticatesUsers;
use Illuminate\Http\Request;
use Overtrue\LaravelWeChat\Facade as EasyWeChat;
use Socialite;
use Validator;
use EasyWeChat;
class AuthenticateController extends ApiController
{
@ -27,35 +27,22 @@ class AuthenticateController extends ApiController
return 'openid';
}
public function easyWechatGetSession($code)
{
// $config = config('wechat.mini_program.default');
// $app = Facade::miniProgram($config);
// return $app->auth->session($code);
}
/**
* 处理小程序的自动登陆和注册
* @param Request $request
* @return mixed
* @throws \EasyWeChat\Kernel\Exceptions\InvalidConfigException
*/
public function auto_login(Request $request)
{
// 获取openid
if ($request->code) {
$wx_info = $this->easyWechatGetSession($request->code);
}
$mini = EasyWeChat::miniProgram();
return $wx_info;
if (!$request->openid && empty($wx_info['openid'])) {
$miniInfo = $mini->auth->session($request->get('code'));
// 判断用户是否合法
if (!$request->get('openid') && empty($miniInfo['openid'])) {
return $this->failed('用户openid没有获取到', 401);
}
$openid = empty($wx_info['openid'])?$request->openid:$wx_info['openid'];
$openid = empty($miniInfo['openid']) ? $request->get('openid') : $miniInfo['openid'];
$userInfo = User::where('openid', $openid)->first();
if ($userInfo && $userInfo->toArray()) {
//执行登录
@ -64,10 +51,10 @@ class AuthenticateController extends ApiController
$userInfo->save();
// 直接创建token
$token = $userInfo->createToken($openid)->accessToken;
return $this->success(compact('token','userInfo'));
return $this->success(compact('token', 'userInfo'));
} else {
//执行注册
return $this->register($request,$openid);
return $this->register($request, $openid);
}
}
@ -75,17 +62,18 @@ class AuthenticateController extends ApiController
* 用户注册
* @param Request $request
*/
public function register($request,$openid)
public function register($request, $openid)
{
// 进行基本验证
$user_info = \GuzzleHttp\json_decode($request->input('rawData'),true);
return $request->input('rawData');
$user_info = \GuzzleHttp\json_decode($request->input('rawData'), true);
//注册信息 字段名=》get到的值
$newUser = [
'openid' => $openid, //openid
'nickname' => $user_info['nickName'],// 昵称
'email' => time().'sqc157400661@163.com',// 邮箱
'email' => time() . 'sqc157400661@163.com',// 邮箱
'name' => $user_info['nickName'],// 昵称
'avatar' =>$user_info['avatarUrl'], //头像
'avatar' => $user_info['avatarUrl'], //头像
'unionid' => '', // unionid (可空)
'state' => 1,
'role' => 0,
@ -97,7 +85,7 @@ class AuthenticateController extends ApiController
$userInfo = User::create($newUser);
// 直接创建token
$token = $userInfo->createToken($openid)->accessToken;
return $this->success(compact('token','userInfo'));
return $this->success(compact('token', 'userInfo'));
}
protected function sendFailedLoginResponse(Request $request)

131
mini/app.js vendored

@ -5,6 +5,56 @@ var user = require('./services/user.js');
App({
onLaunch: function () {
wx.navigateTo({
url: '/pages/welcome/welcome',
})
// wx.login({
// success: res =>{
// console.log(res);
// },
// fail: error => {
// console.log(error);
// }
// })
// wx.getSetting({
// success: res => {
// if(res.authSetting['scope.userInfo']){
// console.log("已授权");
// wx.getUserInfo({
// success: res => {
// console.log(res);
// }
// })
// }else{
// console.log("未授权");
// }
// }
// })
// wx.showModal({
// title: '提示',
// content: '这是一个模态弹窗',
// success: function (res) {
// if (res.confirm) {//这里是点击了确定以后
// console.log('用户点击确定')
// } else {//这里是点击了取消以后
// console.log('用户点击取消')
// }
// }
// })
// wx.getLocation({
// success: function(res) {
// console.log(res);
@ -53,28 +103,28 @@ App({
// }
// });
wx.login({
success: function (res) {
console.log('登录成功' + res);
if (res.code) {
//发起网络请求
wx.request({
url: 'http://127.0.0.1:8000/api/login',
data: {
code: res.code
},
success: res => {
console.log(res);
},
fail: error => {
console.log(error)
}
})
} else {
console.log('登录失败!' + res.errMsg)
}
}
});
// wx.login({
// success: function (res) {
// console.log('登录成功' + res);
// if (res.code) {
// //发起网络请求
// wx.request({
// url: 'http://127.0.0.1:8000/api/login',
// data: {
// code: res.code
// },
// success: res => {
// console.log(res);
// },
// fail: error => {
// console.log(error)
// }
// })
// } else {
// console.log('登录失败!' + res.errMsg)
// }
// }
// });
// //获取用户的登录信息
@ -88,12 +138,37 @@ App({
},
// globalData: {
// userInfo: {
// nickname: '游客',
// username: '去登录',
// avatar: 'http://mp.fengyuexingzi.top/images/default_head.png'
// },
// token: '',
// }
getUserInfo: function (cb) {
var that = this
if (this.globalData.userInfo) {
typeof cb == "function" && cb(this.globalData.userInfo)
} else {
//调用登录接口
wx.login({
success: function () {
wx.getUserInfo({
success: function (res) {
console.log(res);
wx.setStorageSync('isFirst', res.userInfo);
that.globalData.userInfo = res.userInfo
typeof cb == "function" && cb(that.globalData.userInfo)
}
})
}
})
}
},
globalData: {
userInfo: {
nickname: '游客',
username: '去登录',
avatar: 'http://mp.fengyuexingzi.top/images/default_head.png'
},
token: '',
userInfo: null
}
})

@ -34,7 +34,9 @@
"pages/shopping/address/address",
"pages/shopping/addressAdd/addressAdd",
"pages/goods/goods",
"pages/topicDetail/topicDetail"
"pages/topicDetail/topicDetail",
"pages/welcome",
"pages/welcome/welcome"
],
"window": {
"backgroundTextStyle": "dark",

@ -12,7 +12,8 @@ Page({
brands: [],
floorGoods: [],
carouselInfo: [],
specialList: []
specialList: [],
userInfo: {}
},
onShareAppMessage: function () {
return {
@ -39,7 +40,16 @@ Page({
});
},
onLoad: function (options) {
//this.getIndexData();
var that = this
app.getUserInfo(function (userInfo) {
//更新数据
that.setData({
userInfo: userInfo
})
})
},
onReady: function () {
// 页面渲染完成

@ -1,6 +1,7 @@
<!--index.wxml-->
<view class="container">
<button id='abc' open-type="getUserInfo">登录</button>
<swiper class="banner" indicator-dots="true" autoplay="true" interval="3000" duration="1000">
<swiper-item wx:for="{{carouselInfo}}" wx:key="{{item.id}}">
<navigator url="{{item.businessId}}">

@ -2,7 +2,7 @@
<view class="profile-info" bindtap="goLogin">
<image class="avatar" src="{{userInfo.avatar}}"></image>
<view class="info">
<text class="name">{{userInfo.nickname}}</text>
<text class="name">{{userInfo.nickname}}11</text>
<!-- <text class="level">{{userInfo.username}}</text> -->
</view>
</view>

@ -0,0 +1,66 @@
// pages/welcome.js
Page({
/**
* 页面的初始数据
*/
data: {
},
/**
* 生命周期函数--监听页面加载
*/
onLoad: function (options) {
},
/**
* 生命周期函数--监听页面初次渲染完成
*/
onReady: function () {
},
/**
* 生命周期函数--监听页面显示
*/
onShow: function () {
},
/**
* 生命周期函数--监听页面隐藏
*/
onHide: function () {
},
/**
* 生命周期函数--监听页面卸载
*/
onUnload: function () {
},
/**
* 页面相关事件处理函数--监听用户下拉动作
*/
onPullDownRefresh: function () {
},
/**
* 页面上拉触底事件的处理函数
*/
onReachBottom: function () {
},
/**
* 用户点击右上角分享
*/
onShareAppMessage: function () {
}
})

@ -0,0 +1,2 @@
<!--pages/welcome.wxml-->
<text>pages/welcome.wxml</text>

@ -0,0 +1 @@
/* pages/welcome.wxss */

@ -0,0 +1,66 @@
// pages/welcome/welcome.js
Page({
/**
* 页面的初始数据
*/
data: {
},
/**
* 生命周期函数--监听页面加载
*/
onLoad: function (options) {
},
/**
* 生命周期函数--监听页面初次渲染完成
*/
onReady: function () {
},
/**
* 生命周期函数--监听页面显示
*/
onShow: function () {
},
/**
* 生命周期函数--监听页面隐藏
*/
onHide: function () {
},
/**
* 生命周期函数--监听页面卸载
*/
onUnload: function () {
},
/**
* 页面相关事件处理函数--监听用户下拉动作
*/
onPullDownRefresh: function () {
},
/**
* 页面上拉触底事件的处理函数
*/
onReachBottom: function () {
},
/**
* 用户点击右上角分享
*/
onShareAppMessage: function () {
}
})

@ -0,0 +1,2 @@
<!--pages/welcome/welcome.wxml-->
<text>pages/welcome/welcome.wxml</text>

@ -0,0 +1 @@
/* pages/welcome/welcome.wxss */

@ -10,11 +10,8 @@ const api = require('../config/api.js');
* 调用微信登录
*/
function loginByWeixin() {
let code = null;
console.log('promise')
return new Promise(function (resolve, reject) {
console.log('promise')
return util.login().then((res) => {
code = res.code;
return util.getUserInfo();

90
mini/utils/util.js vendored

@ -18,20 +18,20 @@ function formatNumber(n) {
return n[1] ? n : '0' + n
}
function toUrl(url, params){
let paramsArr = [];
if (params) {
Object.keys(params).forEach(item => {
paramsArr.push(item + '=' + params[item]);
})
if (url.search(/\?/) === -1) {
url += '?' + paramsArr.join('&');
} else {
url += '&' + paramsArr.join('&');
}
function toUrl(url, params) {
let paramsArr = [];
if (params) {
Object.keys(params).forEach(item => {
paramsArr.push(item + '=' + params[item]);
})
if (url.search(/\?/) === -1) {
url += '?' + paramsArr.join('&');
} else {
url += '&' + paramsArr.join('&');
}
return url;
}
return url;
}
/**
* 封封微信的的request
@ -39,46 +39,46 @@ function toUrl(url, params){
function request(url, data = {}, method = "GET") {
return new Promise(function (resolve, reject) {
var token = wx.getStorageSync('token');
url = toUrl(url, {'token':token})
url = toUrl(url, { 'token': token })
wx.request({
url: url,
data: data,
method: method,
header: {
'Content-Type': 'application/json',
'Authorization': 'Bearer '+ wx.getStorageSync('token')
'Authorization': 'Bearer ' + wx.getStorageSync('token')
},
success: function (res) {
if (res.data.code == 200) {
resolve(res.data);
}else if(res.data.code == 401){
//需要登录后才可以操作
let code = null;
return login().then((res) => {
code = res.code;
return getUserInfo();
}).then((userInfo) => {
console.log(userInfo);
//登录远程服务器
request(api.AuthLoginByWeixin, { code: code, encryptedData: userInfo.encryptedData,iv: userInfo.iv,rawData: userInfo.rawData }, 'POST').then(res => {
if (res.code == 200) {
//存储用户信息
wx.setStorageSync('userInfo', res.data.userInfo);
wx.setStorageSync('token', res.data.token);
resolve(res);
wx.reLaunch({
url: '/pages/index/index',
});
} else {
reject(res);
}
}).catch((err) => {
reject(err);
});
} else if (res.data.code == 401) {
//需要登录后才可以操作
let code = null;
return login().then((res) => {
code = res.code;
return getUserInfo();
}).then((userInfo) => {
console.log(userInfo);
//登录远程服务器
request(api.AuthLoginByWeixin, { code: code, encryptedData: userInfo.encryptedData, iv: userInfo.iv, rawData: userInfo.rawData }, 'POST').then(res => {
if (res.code == 200) {
//存储用户信息
wx.setStorageSync('userInfo', res.data.userInfo);
wx.setStorageSync('token', res.data.token);
resolve(res);
wx.reLaunch({
url: '/pages/index/index',
});
} else {
reject(res);
}
}).catch((err) => {
reject(err);
})
});
}).catch((err) => {
reject(err);
})
} else {
reject(res.message);
}
@ -112,13 +112,11 @@ function checkSession() {
* 调用微信登录
*/
function login() {
console.log('util login');
return new Promise(function (resolve, reject) {
wx.login({
success: function (res) {
if (res.code) {
//登录远程服务器
console.log(res.code);
resolve(res);
} else {
reject(res);
@ -132,7 +130,6 @@ function login() {
}
function getUserInfo() {
console.log('abc');
return new Promise(function (resolve, reject) {
wx.getUserInfo({
withCredentials: true,
@ -141,7 +138,6 @@ function getUserInfo() {
resolve(res);
},
fail: function (err) {
console.log(1111111);
console.log(err);
reject(err);
}
@ -179,6 +175,4 @@ module.exports = {
checkSession,
login,
getUserInfo,
}
}

@ -15,7 +15,7 @@
"cross-env": "^5.1",
"jquery": "^3.2",
"laravel-mix": "^1.0",
"lodash": "^4.17.4",
"lodash": "^4.17.11",
"vue": "^2.5.7"
}
}

Loading…
Cancel
Save