Laravel 微信小程序后端實現(xiàn)用戶登錄的示例代碼
接上篇微信小程序后端搭建:分享:Laravel 微信小程序后端搭建
后端搭建好后第一件事就是用戶登錄認證,簡單實現(xiàn)微信小程序登錄認證
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;
// 根據(jù) 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 對應(yīng)的用戶
$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;
}
// 更新用戶數(shù)據(jù)
$user->update($attributes);
// 直接創(chuàng)建token并設(shè)置有效期
$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);
}
//我保存到又拍云了,版權(quán)歸騰訊所有。。。頭條鬧的
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({
/**
* 頁面的初始數(shù)據(jù)
*/
data: {
UserData: [],
isClick: false,
},
/**
* 生命周期函數(shù)--監(jiān)聽頁面加載
*/
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: '服務(wù)器錯誤',
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>
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持我們。
上一篇:Laravel框架基礎(chǔ)語法與知識點整理【模板變量、輸出、include引入子視圖等】
欄 目:PHP編程
下一篇:Laravel框架Blade模板簡介及模板繼承用法分析
本文標題:Laravel 微信小程序后端實現(xiàn)用戶登錄的示例代碼
本文地址:http://www.jygsgssxh.com/a1/PHPbiancheng/11077.html
您可能感興趣的文章
- 01-11Laravel 微信小程序后端搭建步驟詳解
- 01-11Laravel框架Blade模板簡介及模板繼承用法分析
- 01-11Laravel框架基礎(chǔ)語法與知識點整理【模板變量、輸出、include引入
- 01-11Laravel框架Eloquent ORM刪除數(shù)據(jù)操作示例
- 01-11Laravel框架Eloquent ORM修改數(shù)據(jù)操作示例
- 01-11Laravel框架Eloquent ORM簡介、模型建立及查詢數(shù)據(jù)操作詳解
- 01-11php實現(xiàn)快速對二維數(shù)組某一列進行組裝的方法小結(jié)
- 01-11laravel5.1框架下的批量賦值實現(xiàn)方法分析
- 01-11laravel5.5框架的上傳圖片功能實例分析【僅傳到服務(wù)器端】
- 01-11Laravel框架下載,安裝及路由操作圖文詳解


閱讀排行
本欄相關(guān)
- 04-02php本站才可以請求數(shù)據(jù) php本地數(shù)據(jù)庫
- 04-02關(guān)于txt數(shù)據(jù)庫php的信息
- 04-02php打印請求數(shù)據(jù) php打印輸出結(jié)果
- 04-02網(wǎng)頁里php操作數(shù)據(jù)庫 php網(wǎng)頁例子
- 04-02php插入數(shù)據(jù)庫為亂碼 php連接數(shù)據(jù)庫亂
- 04-02php數(shù)據(jù)庫地址 phpstudy 數(shù)據(jù)庫
- 04-02php數(shù)據(jù)庫數(shù)據(jù)相加 php數(shù)據(jù)庫添加數(shù)據(jù)
- 04-02數(shù)據(jù)權(quán)限架構(gòu)思路php 數(shù)據(jù)權(quán)限設(shè)計方
- 04-02php數(shù)據(jù)庫輸入變量 php里輸出數(shù)據(jù)庫數(shù)
- 04-02php如何用導入數(shù)據(jù) php用來導入其他文
隨機閱讀
- 08-05DEDE織夢data目錄下的sessions文件夾有什
- 01-10SublimeText編譯C開發(fā)環(huán)境設(shè)置
- 01-10delphi制作wav文件的方法
- 08-05dedecms(織夢)副欄目數(shù)量限制代碼修改
- 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文
- 04-02jquery與jsp,用jquery
- 08-05織夢dedecms什么時候用欄目交叉功能?
- 01-10使用C語言求解撲克牌的順子及n個骰子
- 01-10C#中split用法實例總結(jié)
- 01-11ajax實現(xiàn)頁面的局部加載


