gpt4 book ai didi

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

转载 作者:qq735679552 更新时间:2022-09-29 22:32:09 26 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章Laravel 微信小程序后端实现用户登录的示例代码由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

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

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

1.user 模型 。

use Laravel\Passport\HasApiTokens; 新增 。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
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. 新增一条路由 。

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

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

?
1
2
3
4
use App\User;
use Carbon\Carbon;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Storage;

写两个 function weappLogin (),avatarUpyun () 。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
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 。

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

小头像默认 / 132 。

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

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
{
  "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 。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
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 。

?
1
2
3
4
< 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 >

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

原文链接:https://learnku.com/weapp/t/28680 。

最后此篇关于Laravel 微信小程序后端实现用户登录的示例代码的文章就讲到这里了,如果你想了解更多关于Laravel 微信小程序后端实现用户登录的示例代码的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com