国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

微信小程序-微信授權(quán)登錄

這篇具有很好參考價(jià)值的文章主要介紹了微信小程序-微信授權(quán)登錄。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

前言

小程序可以通過(guò)微信官方提供的登錄能力方便地獲取微信提供的用戶身份標(biāo)識(shí),快速建立小程序內(nèi)的用戶體系

微信小程序-微信授權(quán)登錄,微信小程序,微信,小程序,交互,學(xué)習(xí),微信小程序

?一.微信授權(quán)登錄工作流程

1.理論敘述

  1. 觸發(fā)授權(quán)登錄: 用戶在小程序中觸發(fā)登錄操作,通常通過(guò)點(diǎn)擊登錄按鈕或執(zhí)行相關(guān)操作。

  2. 授權(quán)彈窗: 小程序彈出授權(quán)登錄的彈窗,要求用戶授權(quán)小程序訪問(wèn)其微信賬號(hào)信息。

  3. 用戶選擇授權(quán): 用戶可以選擇授權(quán)或拒絕授權(quán)。如果用戶拒絕,登錄流程終止。

  4. 獲取登錄憑證: 如果用戶選擇授權(quán),小程序會(huì)獲得一個(gè)臨時(shí)的 code。

  5. 向后臺(tái)服務(wù)器發(fā)送登錄憑證: 小程序?qū)?code 發(fā)送到自己的后臺(tái)服務(wù)器。

  6. 后臺(tái)服務(wù)器與微信服務(wù)器通信: 后臺(tái)服務(wù)器使用 code 向微信服務(wù)器發(fā)送請(qǐng)求,請(qǐng)求中包括小程序的 AppID、AppSecret 和 code

  7. 微信服務(wù)器響應(yīng): 微信服務(wù)器會(huì)驗(yàn)證 code 的合法性,并在驗(yàn)證通過(guò)后,返回用戶的唯一標(biāo)識(shí)符 openid 和會(huì)話密鑰 session_key

  8. 后臺(tái)服務(wù)器驗(yàn)證身份: 后臺(tái)服務(wù)器通常會(huì)驗(yàn)證 openidsession_key 的有效性,以確保用戶的身份合法。這一步也可以用于防止濫用和欺詐。

  9. 用戶數(shù)據(jù)加解密: 小程序使用 session_key 來(lái)加密和解密用戶的數(shù)據(jù),以保護(hù)用戶的隱私。

  10. 執(zhí)行業(yè)務(wù)邏輯: 一旦用戶登錄成功,小程序可以執(zhí)行與用戶身份相關(guān)的業(yè)務(wù)邏輯,如顯示個(gè)性化內(nèi)容、保存用戶操作記錄等。

  11. 保護(hù)用戶隱私: 小程序必須尊重用戶隱私,僅獲取有限的用戶信息,不包括敏感信息。

  12. 用戶退出: 提供用戶注銷或取消授權(quán)的選項(xiàng),以允許用戶隨時(shí)退出登錄。

2.圖文詳解

微信小程序-微信授權(quán)登錄,微信小程序,微信,小程序,交互,學(xué)習(xí),微信小程序

二.微信授權(quán)登錄案例講解

1.準(zhǔn)備配置

1.1 前端接口調(diào)用地址

// 以下是業(yè)務(wù)服務(wù)器API地址
 // 本機(jī)開(kāi)發(fā)API地址
var WxApiRoot = 'http://localhost:8080/oapro/wx/';
// 測(cè)試環(huán)境部署api地址
// var WxApiRoot = 'http://192.168.191.1:8080/oapro/wx/';
// 線上平臺(tái)api地址
//var WxApiRoot = 'https://www.oa-mini.com/demo/wx/';

module.exports = {
  IndexUrl: WxApiRoot + 'home/index', //首頁(yè)數(shù)據(jù)接口
  SwiperImgs: WxApiRoot+'swiperImgs',
  MettingInfos: WxApiRoot+'meeting/list',
  AuthLoginByWeixin: WxApiRoot + 'auth/login_by_weixin', //微信登錄
  UserIndex: WxApiRoot + 'user/index', //個(gè)人頁(yè)面用戶相關(guān)信息
  AuthLogout: WxApiRoot + 'auth/logout', //賬號(hào)登出
  AuthBindPhone: WxApiRoot + 'auth/bindPhone' //綁定微信手機(jī)號(hào)
};

1.2 封裝微信調(diào)用request

/**
 * 封封微信的的request
 */
function request(url, data = {}, method = "GET") {
  return new Promise(function (resolve, reject) {
    wx.request({
      url: url,
      data: data,
      method: method,
      timeout:3000,
      header: {
        'Content-Type': 'application/json',
        'X-OA-Token': wx.getStorageSync('token')
      },
      success: function (res) {
        if (res.statusCode == 200) {
          if (res.data.errno == 501) {
            // 清除登錄相關(guān)內(nèi)容
            try {
              wx.removeStorageSync('userInfo');
              wx.removeStorageSync('token');
            } catch (e) {
              // Do something when catch error
            }
            // 切換到登錄頁(yè)面
            wx.navigateTo({
              url: '/pages/auth/login/login'
            });
          } else {
            resolve(res.data);
          }
        } else {
          reject(res.errMsg);
        }

      },
      fail: function (err) {
        reject(err)
      }
    })
  });
}

function redirect(url) {
  //判斷頁(yè)面是否需要登錄
  if (false) {
    wx.redirectTo({
      url: '/pages/auth/login/login'
    });
    return false;
  } else {
    wx.redirectTo({
      url: url
    });
  }
}

1.3?配置數(shù)據(jù)庫(kù)及小程序和小程序密鑰

微信小程序-微信授權(quán)登錄,微信小程序,微信,小程序,交互,學(xué)習(xí),微信小程序

微信小程序-微信授權(quán)登錄,微信小程序,微信,小程序,交互,學(xué)習(xí),微信小程序?

2.點(diǎn)擊觸發(fā)授權(quán)登錄

微信小程序-微信授權(quán)登錄,微信小程序,微信,小程序,交互,學(xué)習(xí),微信小程序

3.登錄流程

代碼流程解釋:授權(quán)彈窗后會(huì)獲取我們的用戶信息,通過(guò)登錄判斷我們是否登錄過(guò),若沒(méi)有,則調(diào)用微信登錄的函數(shù)進(jìn)行登錄操作,首先,將用戶信息以參數(shù)的形式進(jìn)行傳遞,通過(guò)用戶信息向遠(yuǎn)程服務(wù)器(后端)發(fā)送請(qǐng)求,并攜帶授權(quán)登錄時(shí)的臨時(shí)code值,再通過(guò)調(diào)用微信的授權(quán)登錄接口,將code值進(jìn)行傳入,然后返回一個(gè)結(jié)果對(duì)象,通過(guò)當(dāng)前對(duì)象獲取我們的session_key和openid(唯一標(biāo)識(shí)),通過(guò)當(dāng)前的openid可以獲取到我們的用戶信息判斷我們是否之前登錄過(guò)當(dāng)前小程序,并將登錄信息存儲(chǔ)到數(shù)據(jù)庫(kù)中,且將我們的登錄時(shí)間進(jìn)行更新

2.1 前端函數(shù)代碼

getUserProfile(e) {
        // 推薦使用wx.getUserProfile獲取用戶信息,開(kāi)發(fā)者每次通過(guò)該接口獲取用戶個(gè)人信息均需用戶確認(rèn)
        // 開(kāi)發(fā)者妥善保管用戶快速填寫的頭像昵稱,避免重復(fù)彈窗
        wx.getUserProfile({
            desc: '用于完善會(huì)員資料', // 聲明獲取用戶個(gè)人信息后的用途,后續(xù)會(huì)展示在彈窗中,請(qǐng)謹(jǐn)慎填寫
            success: (res) => {
                //console.log(res);
                debugger
                user.checkLogin().catch(() => {
                    user.loginByWeixin(res.userInfo).then(res => {
                      app.globalData.hasLogin = true;
                      debugger
                      wx.navigateBack({
                        delta: 1
                      })
                    }).catch((err) => {
                      app.globalData.hasLogin = false;
                      if(err.errMsg=="request:fail timeout"){
                        util.showErrorToast('微信登錄超時(shí)');
                      }else{
                        util.showErrorToast('微信登錄失敗');
                      }
                      this.setData({
                        lock:false
                      })
                    });
                  });
            },
            fail: (res) => {
                app.globalData.hasLogin = false;
                console.log(res);
                util.showErrorToast('微信登錄失敗');
            }
        });
    },

2.2 后端邏輯代碼

?

 @PostMapping("login_by_weixin")
    public Object loginByWeixin(@RequestBody WxLoginInfo wxLoginInfo, HttpServletRequest request) {

        //客戶端需攜帶code與userInfo信息
        String code = wxLoginInfo.getCode();
        UserInfo userInfo = wxLoginInfo.getUserInfo();
        if (code == null || userInfo == null) {
            return ResponseUtil.badArgument();
        }
        //調(diào)用微信sdk獲取openId及sessionKey
        String sessionKey = null;
        String openId = null;
        try {
            long beginTime = System.currentTimeMillis();
            //
            WxMaJscode2SessionResult result = this.wxService.getUserService().getSessionInfo(code);
//            Thread.sleep(6000);
            long endTime = System.currentTimeMillis();
            log.info("響應(yīng)時(shí)間:{}",(endTime-beginTime));
            sessionKey = result.getSessionKey();//session id
            openId = result.getOpenid();//用戶唯一標(biāo)識(shí) OpenID
        } catch (Exception e) {
            e.printStackTrace();
        }

        if (sessionKey == null || openId == null) {
            log.error("微信登錄,調(diào)用官方接口失?。簕}", code);
            return ResponseUtil.fail();
        }else{
            log.info("openId={},sessionKey={}",openId,sessionKey);
        }
        //根據(jù)openId查詢wx_user表
        //如果不存在,初始化wx_user,并保存到數(shù)據(jù)庫(kù)中
        //如果存在,更新最后登錄時(shí)間
        WxUser user = userService.queryByOid(openId);

        if (user == null) {
            user = new WxUser();
            user.setUsername(openId);
            user.setPassword(openId);
            user.setWeixinOpenid(openId);
            user.setAvatar(userInfo.getAvatarUrl());
            user.setNickname(userInfo.getNickName());
            user.setGender(userInfo.getGender());
            user.setUserLevel((byte) 0);
            user.setStatus((byte) 0);
            user.setLastLoginTime(new Date());
            user.setLastLoginIp(IpUtil.client(request));
            user.setShareUserId(1);

            userService.add(user);

        } else {
            user.setLastLoginTime(new Date());
            user.setLastLoginIp(IpUtil.client(request));
            if (userService.updateById(user) == 0) {
                log.error("修改失?。簕}", user);
                return ResponseUtil.updatedDataFailed();
            }
        }
        // token
        UserToken userToken = null;
        try {
            userToken = UserTokenManager.generateToken(user.getId());
        } catch (Exception e) {
            log.error("微信登錄失敗,生成token失?。簕}", user.getId());
            e.printStackTrace();
            return ResponseUtil.fail();
        }
        userToken.setSessionKey(sessionKey);
        log.info("SessionKey={}",UserTokenManager.getSessionKey(user.getId()));
        Map<Object, Object> result = new HashMap<Object, Object>();
        result.put("token", userToken.getToken());
        result.put("tokenExpire", userToken.getExpireTime().toString());
        userInfo.setUserId(user.getId());
        if (!StringUtils.isEmpty(user.getMobile())) {// 手機(jī)號(hào)存在則設(shè)置
            userInfo.setPhone(user.getMobile());
        }
        try {
            DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
            String registerDate = df.format(user.getAddTime() != null ? user.getAddTime() : new Date());
            userInfo.setRegisterDate(registerDate);
            userInfo.setStatus(user.getStatus());
            userInfo.setUserLevel(user.getUserLevel());// 用戶層級(jí)
            userInfo.setUserLevelDesc(UserTypeEnum.getInstance(user.getUserLevel()).getDesc());// 用戶層級(jí)描述
        } catch (Exception e) {
            log.error("微信登錄:設(shè)置用戶指定信息出錯(cuò):"+e.getMessage());
            e.printStackTrace();
        }
        result.put("userInfo", userInfo);


        log.info("【請(qǐng)求結(jié)束】微信登錄,響應(yīng)結(jié)果:{}", JSONObject.toJSONString(result));

        return ResponseUtil.ok(result);
    }

2.3 token

由上述代碼可知,我們的末尾中獲取當(dāng)前token令牌,由于我們前面通過(guò)openid獲取到所有的用戶信息,包括我們的用戶id,然后我們就可以使用這個(gè)用戶id去生成一個(gè)專屬的token令牌,并響應(yīng)到前端,存儲(chǔ)到我們的請(qǐng)求頭中,具體了解token令牌詳解請(qǐng)看往期博客,有詳解一篇文章讓你了解“JWT“

@GetMapping("index")
	public Object list(@LoginUser Integer userId, @RequestHeader("X-OA-token") String token) {
		log.info("【請(qǐng)求開(kāi)始】用戶個(gè)人頁(yè)面數(shù)據(jù),請(qǐng)求參數(shù),userId:{}", userId);
		log.info("【請(qǐng)求開(kāi)始】用戶個(gè)人頁(yè)面數(shù)據(jù),請(qǐng)求參數(shù),token:{}", token);
		if (userId == null) {
			log.error("用戶個(gè)人頁(yè)面數(shù)據(jù)查詢失敗:用戶未登錄?。?!");
			return ResponseUtil.unlogin();
		}
		WxUser wxUser = userService.selectByPrimaryKey(userId);
		Map<Object, Object> data = new HashMap<Object, Object>();
		data.put("metting_pubs", wxUser.getUserLevel());
		data.put("metting_joins",wxUser.getUserLevel());
		return ResponseUtil.ok(data);
	}

?4.效果演示

微信小程序-微信授權(quán)登錄,微信小程序,微信,小程序,交互,學(xué)習(xí),微信小程序

3.1 登錄時(shí)間更新

微信小程序-微信授權(quán)登錄,微信小程序,微信,小程序,交互,學(xué)習(xí),微信小程序

三.退出登錄

前端向后端發(fā)送退出登錄請(qǐng)求,后端通過(guò)判斷userid將我們的token令牌進(jìn)行銷毀,防止被他人利用token令牌向服務(wù)器發(fā)送惡意請(qǐng)求,保證安全性

/**
     * 注銷登錄
     */
    @PostMapping("logout")
    public Object logout(@LoginUser Integer userId) {
        log.info("【請(qǐng)求開(kāi)始】注銷登錄,請(qǐng)求參數(shù),userId:{}", userId);
        if (userId == null) {
            return ResponseUtil.unlogin();
        }
        try {
            UserTokenManager.removeToken(userId);
        } catch (Exception e) {
            log.error("注銷登錄出錯(cuò):userId:{}", userId);
            e.printStackTrace();
            return ResponseUtil.fail();
        }

        log.info("【請(qǐng)求結(jié)束】注銷登錄成功!");
        return ResponseUtil.ok();
    }

今天的分享到這里就結(jié)束了,感謝各位大大的觀看,各位大大的三連是博主更新的動(dòng)力,感謝謝謝謝謝謝謝謝謝各位的支持?。。。。??

微信小程序-微信授權(quán)登錄,微信小程序,微信,小程序,交互,學(xué)習(xí),微信小程序文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-713014.html

到了這里,關(guān)于微信小程序-微信授權(quán)登錄的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 微信小程序授權(quán)登錄流程

    微信小程序授權(quán)登錄流程

    我是IT果果日記,微信公眾號(hào)請(qǐng)搜索 IT果果日記 一個(gè)普通的技術(shù)宅,定期分享技術(shù)文章,歡迎點(diǎn)贊、關(guān)注和轉(zhuǎn)發(fā),請(qǐng)多關(guān)照。 首先, 我們要了解什么是微信小程序登錄?它的作用是什么? 微信小程序登錄是為了讓開(kāi)發(fā)者的服務(wù)器獲取用戶的openId以及session_key的令牌。 請(qǐng)不要

    2024年02月14日
    瀏覽(88)
  • 【微信小程序】授權(quán)登錄流程解析

    【微信小程序】授權(quán)登錄流程解析

    ? 目錄 微信授權(quán)登錄流程 1.?官方圖示流程詳解 2. 代碼登錄流程拆解 2.1 前端代碼示例講解 2.2 后端代碼示例講解 2.3 代碼登錄流程拆解 ?? 3. 表情包存儲(chǔ)展示(擴(kuò)展) 附議? ① 微信服務(wù)器驗(yàn)證: 當(dāng)用戶打開(kāi)小程序時(shí),小程序會(huì)向用戶展示登錄按鈕,用戶點(diǎn)擊登錄按鈕后,小

    2024年02月08日
    瀏覽(19)
  • 微信小程序授權(quán)登錄詳細(xì)解析

    微信小程序授權(quán)登錄詳細(xì)解析

    一、首先在wxml頁(yè)面定義一個(gè)普通按鈕,在用bindtap定義一個(gè)事件 ?二、去到j(luò)s頁(yè)面,使用wx.getUserProfile獲取到用戶信息,主要獲取微信昵稱和微信頭像 ?三、使用wx.login獲取code發(fā)送請(qǐng)求 ? 四、將code、nickName、avatarUrl傳入到后端 ?五、后端接受到code、用戶頭像、用戶昵稱 ?六、

    2024年02月09日
    瀏覽(28)
  • UNIAPP---實(shí)現(xiàn)微信小程序登錄授權(quán)和手機(jī)號(hào)授權(quán)(uniapp做微信小程序)

    UNIAPP---實(shí)現(xiàn)微信小程序登錄授權(quán)和手機(jī)號(hào)授權(quán)(uniapp做微信小程序)

    描述:uniapp開(kāi)發(fā)小程序,先授權(quán)用戶信息后再出現(xiàn)手機(jī)號(hào)授權(quán)的頁(yè)面進(jìn)行手機(jī)號(hào)授權(quán)。完成后返回上一頁(yè)面并把信息存入后臺(tái)以及前臺(tái)緩存中,方便使用。 1.在uniapp的manifest.json進(jìn)行微信小程序配置 2.封裝request請(qǐng)求api.js(如果已封裝可跳過(guò)) 3.封裝微信授權(quán)登錄以及獲取手機(jī)

    2024年02月11日
    瀏覽(36)
  • 微信小程序手機(jī)號(hào)授權(quán)登錄

    微信小程序手機(jī)號(hào)授權(quán)登錄

    微信小程序,手機(jī)號(hào)授權(quán)登錄需求。 大體流程是這樣的: 小程序端使用 getPhoneNumber 向微信平臺(tái)獲取授權(quán) 通過(guò)微信授權(quán)后,小程序端接收微信授權(quán)后的回調(diào) 小程序攜帶微信的回調(diào)請(qǐng)求自己的服務(wù)端 服務(wù)端請(qǐng)求微信獲取手機(jī)號(hào)并將手機(jī)號(hào)回調(diào)給小程序端 具體步驟和代碼如下:

    2024年02月13日
    瀏覽(21)
  • 微信小程序-授權(quán)登錄(手機(jī)號(hào)碼)

    微信小程序-授權(quán)登錄(手機(jī)號(hào)碼)

    template ?? ?view class=\\\"work-container\\\" ?? ??? ?view class=\\\"login\\\" ?? ??? ??? ?view class=\\\"content\\\" ?? ??? ??? ??? ?button class=\\\"button_wx\\\" open-type=\\\"getPhoneNumber\\\" @getphonenumber=\\\"getPhoneNumber\\\" ?? ??? ??? ??? ??? ?u-icon name=\\\"weixin-fill\\\" color=\\\"#FFFFFF\\\" size=\\\"50\\\"/u-icon ?? ??? ??? ??? ??? ?

    2024年02月06日
    瀏覽(33)
  • 微信小程序授權(quán)手機(jī)號(hào)碼登錄

    因公司項(xiàng)目需要做微信小程序相關(guān)項(xiàng)目,故記錄一下相關(guān)開(kāi)發(fā)要點(diǎn)。 使用的是binarywang工具包,版本為4.1.0。 后端框架使用springboot 更多其他功能使用推薦查看https://github.com/binarywang/binarywang 3.1 微信小程序開(kāi)發(fā)的相關(guān)配置 在application.yml文件中配置 3.2創(chuàng)建配置文件 代碼如下(示

    2024年02月09日
    瀏覽(26)
  • 微信小程序?qū)崿F(xiàn)授權(quán)登錄及退出

    1.登錄獲取用戶昵稱,頭像 2.創(chuàng)建云函數(shù) 右擊新建文件夾cloud 在根目錄project.config.json中添加: 右擊文件夾cloud選擇當(dāng)前環(huán)境 右擊文件夾cloud新建Node.js云函數(shù),命名login 在新建文件夾login的index.js文件中: 右擊login文件夾選擇上傳并部署:云端安裝依賴(不上傳node_modules),顯

    2024年02月08日
    瀏覽(19)
  • 新!uniapp微信小程序微信授權(quán)登錄

    新!uniapp微信小程序微信授權(quán)登錄

    ?11月后,微信小程序?qū)τ谖⑿攀跈?quán)登錄做了邏輯上的更改,之前的一鍵授權(quán)獲取用戶信息的功能已不再適用。已發(fā)布審核完成的小程序不受影響,但要想再發(fā)布,只能換成新的登陸邏輯了。 首先,要說(shuō)明的,個(gè)人中心頁(yè)面,未登陸時(shí),應(yīng)有登陸按鈕,最好不要通過(guò)路由守衛(wèi)

    2024年02月09日
    瀏覽(20)
  • Java - 微信小程序授權(quán)手機(jī)號(hào)登錄

    ? ? ? ? 最近做了一個(gè)關(guān)于商城的項(xiàng)目,B端選用若依的開(kāi)源框架,C端還是vue前后端分離。其中C端主要是小程序的形式,所以想著來(lái)總結(jié)一下對(duì)接微信小程序登錄中Java部分遇到的坑即代碼分享! 廢話不多說(shuō),直接上代碼! 1、controller 層代碼 ? ? ? ?? 入?yún)⑽疫@邊是直接使用

    2024年02月04日
    瀏覽(19)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包