


Analisis ringkas tentang cara melaksanakan fungsi log masuk dalam program mini
Dec 06, 2021 am 10:11 AMBagaimana untuk melaksanakan fungsi log masuk dalam program mini? Artikel ini akan memperkenalkan kepada anda cara yang betul untuk membuka log masuk program mini Saya harap ia akan membantu anda!
Komponen rangkaian program mini
https://developers.weixin.qq.com/miniprogram /dev/api/network/request/wx.request.html
Perihalan RequestTask
方法 | 說明 |
---|---|
RequestTask.abort() | 中斷請求任務。 |
RequestTask.onHeadersReceived(function callback) | 監(jiān)聽 HTTP Response Header 事件。會比請求完成事件更早。 |
RequestTask.offHeadersReceived(function callback) | 取消監(jiān)聽 HTTP Response Header 事件。 |
RequestTask.onChunkReceived(function callback) | 監(jiān)聽 Transfer-Encoding Chunk Received 事件。當接收到新的chunk時觸發(fā)。 |
RequestTask.offChunkReceived(function callback) | 取消監(jiān)聽 Transfer-Encoding Chunk Received 事件。 |
atribut wx.request(objek objek)
Hanya atribut yang lebih biasa digunakan disenaraikan di sini Untuk semua atribut, sila lihat pautan.
屬性 | 類型 | 默認值 | 必填 | 說明 |
---|---|---|---|---|
url | string | 是 | 開發(fā)者服務器接口地址 | |
data | string/object/ArrayBuffer | 否 | 請求的參數(shù) | |
header | Object | 否 | 設置請求的 header,header 中不能設置 Referer。 content-type 默認為 application/json
|
|
timeout | number | 否 | 超時時間,單位為毫秒 | |
method | string | GET | 否 | HTTP 請求方法 |
success | function | 否 | 接口調(diào)用成功的回調(diào)函數(shù) | |
fail | function | 否 | 接口調(diào)用失敗的回調(diào)函數(shù) | |
complete | function | 否 | 接口調(diào)用結束的回調(diào)函數(shù)(調(diào)用成功、失敗都會執(zhí)行)哪怕是abort掉的請求! |
Untuk meringkaskan: semua antara muka program mini pada asasnya mempunyai dua ciri:
Parameter semuanya adalah satu objek. Mudah diingat dan mudah dikembangkan.
semuanya mempunyai kaedah pemprosesan hasil yang sama: kesemuanya mempunyai tiga atribut panggil balik: kejayaan, gagal dan lengkap.
Pengenalan kepada objek errMsg dalam pelbagai situasi pelaksanaan antara muka.
回調(diào)屬性 | errMsg對象 |
---|---|
success | {errMsg:"request:ok"...} |
fail | {errMsg:"request:fail "...} 有的系統(tǒng)這個fail后面有個空格,所以要使用這個判斷,最好是使用正則表達式。也可以使用indexOf函數(shù),大于-1進行判斷。 |
abort | {errMsg:"request:fail abort"...} |
Kod contoh
let reqTask = wx.request({ url: getApp().globalData.api, success(res) { if (res.errMsg === "request:ok") console.log("res", res); }, fail(err) { // if(err.errMsg.indexOf('request:fail')>-1) console.log('err', err); if (/^request:fail/i.test(err.errMsg)) console.log("err", err); }, complete(res) { console.log("resOrErr", res); }, }); const reqTaskOnHeadersReceived = (headers) => { reqTask.offHeadersReceived(reqTaskOnHeadersReceived); console.log("headers", headers); // 由于請求還未完全結束,所以我們沒辦法獲得請求的狀態(tài)碼,但是我們可以通過返回的requestBody的長度來進行判斷。 // 兩點說明:1. 兩個~~可以把字符串數(shù)字快速轉化為數(shù)字。 // 2. 為什么取小于19,是由于后臺返回沒有權限的requestBody的時候Content-length為“18”,正常情況下是大于19的。所以具體多少得看一下具體情況。 if (~~headers.header["Content-length"] < 19) reqTask.abort(); }; reqTask.onHeadersReceived(reqTaskOnHeadersReceived);
Antara muka log masuk program mini
wx.getUserProfile(Object object)
Dapatkan maklumat pengguna. Ia hanya boleh dipanggil selepas peristiwa klik dijana pada halaman (contohnya, dalam panggilan balik
button
padabindtap
Tetingkap kebenaran akan muncul untuk setiap permintaan dan pengguna akan kembali keuserInfo
). selepas bersetuju. Antara muka ini digunakan untuk menggantikanwx.getUserInfo
Untuk butiran, lihat Arahan Pelarasan Antara Muka Maklumat Pengguna.wx.checkSession(Object object)
Semak sama ada status log masuk telah tamat tempoh. Status log masuk pengguna yang diperoleh melalui antara muka wx.login mempunyai ketepatan masa tertentu. Semakin lama pengguna tidak menggunakan program mini, semakin besar kemungkinan status log masuk pengguna akan menjadi tidak sah. Sebaliknya, jika pengguna telah menggunakan program mini, status log masuk pengguna akan sentiasa sah. Logik pemasaan khusus dikekalkan oleh WeChat dan telus kepada pembangun. Pembangun hanya perlu memanggil antara muka wx.checkSession untuk menyemak sama ada status log masuk pengguna semasa adalah sah.
Selepas status log masuk tamat tempoh, pembangun boleh menghubungi wx.login untuk mendapatkan status log masuk pengguna baharu. Panggilan yang berjaya menunjukkan bahawa session_key semasa belum tamat tempoh, dan panggilan yang gagal menunjukkan bahawa session_key telah tamat tempoh. Untuk butiran penggunaan lanjut, lihat Log Masuk Program Mini.
Panggil antara muka untuk mendapatkan bukti kelayakan log masuk (kod). Maklumat status log masuk pengguna ditukar melalui baucar, termasuk pengenalan unik pengguna dalam program mini semasa (openid), pengenalan unik di bawah akaun platform terbuka WeChat (unionid, jika program mini semasa telah terikat pada platform terbuka WeChat akaun) dan log masuk ini Kunci sesi (session_key), dsb. Penyulitan dan penyahsulitan komunikasi data pengguna bergantung pada kunci sesi. Untuk butiran penggunaan lanjut, lihat Log Masuk Program Mini.
Pelaksanaan kod antara muka log masuk belakang
Halaman belakang menggunakan NodeJS, rangka kerja web versi KOA ^2.13 . 4, rangka kerja penghalaan @koa/router versi ^10.1.1, permintaan rangka kerja, versi ^2.88.2, jsonwebtoken digunakan untuk menyulitkan dan menyahsulit maklumat token, versi ^8.5.1
// app.js const Koa = require("koa"); const Router = require("@koa/router"); const WeixinAuth = require("./lib/koa2-weixin-auth"); const jsonwebtoken = require("jsonwebtoken"); const app = new Koa(); // 小程序機票信息 const miniProgramAppId = "*********"; const miniProgramAppSecret = "***********"; const weixinAuth = new WeixinAuth(miniProgramAppId, miniProgramAppSecret); const JWT_SECRET = "JWTSECRET"; // 路由中間件需要安裝@koa/router // 開啟一個帶群組的路由 const router = new Router({ prefix: "/user", }); // 這是正規(guī)的登陸方法 // 添加一個參數(shù),sessionKeyIsValid,代表sessionKey是否還有效 router.post("/weixin-login", async (ctx) => { let { code, userInfo, encryptedData, iv, sessionKeyIsValid } = ctx.request.body; // 解析openid const token = await weixinAuth.getAccessToken(code); userInfo.openid = token.data.openid; // 這里可以自己進行處理,比方說記錄到數(shù)據(jù)庫,處理token等 let authorizationToken = jsonwebtoken.sign( { name: userInfo.nickName }, JWT_SECRET, { expiresIn: "1d" } ); Object.assign(userInfo, { authorizationToken }); ctx.status = 200; ctx.body = { code: 200, msg: "ok", data: userInfo, }; });
// lib/koa2-weixin-auth.js const querystring = require("querystring"); const request = require("request"); const AccessToken = function (data) { if (!(this instanceof AccessToken)) { return new AccessToken(data); } this.data = data; }; /*! * 檢查AccessToken是否有效,檢查規(guī)則為當前時間和過期時間進行對比 * * Examples: * ``` * token.isValid(); * ``` */ AccessToken.prototype.isValid = function () { return ( !!this.data.session_key && new Date().getTime() < this.data.create_at + this.data.expires_in * 1000 ); }; /** * 根據(jù)appid和appsecret創(chuàng)建OAuth接口的構造函數(shù) * 如需跨進程跨機器進行操作,access token需要進行全局維護 * 使用使用token的優(yōu)先級是: * * 1. 使用當前緩存的token對象 * 2. 調(diào)用開發(fā)傳入的獲取token的異步方法,獲得token之后使用(并緩存它)。 * Examples: * ``` * var OAuth = require('oauth'); * var api = new OAuth('appid', 'secret'); * ``` * @param {String} appid 在公眾平臺上申請得到的appid * @param {String} appsecret 在公眾平臺上申請得到的app secret */ const Auth = function (appid, appsecret) { this.appid = appid; this.appsecret = appsecret; this.store = {}; this.getToken = function (openid) { return this.store[openid]; }; this.saveToken = function (openid, token) { this.store[openid] = token; }; }; /** * 獲取授權頁面的URL地址 * @param {String} redirect 授權后要跳轉的地址 * @param {String} state 開發(fā)者可提供的數(shù)據(jù) * @param {String} scope 作用范圍,值為snsapi_userinfo和snsapi_base,前者用于彈出,后者用于跳轉 */ Auth.prototype.getAuthorizeURL = function (redirect_uri, scope, state) { return new Promise((resolve, reject) => { const url = "https://open.weixin.qq.com/connect/oauth2/authorize"; let info = { appid: this.appid, redirect_uri: redirect_uri, scope: scope || "snsapi_base", state: state || "", response_type: "code", }; resolve(url + "?" + querystring.stringify(info) + "#wechat_redirect"); }); }; /*! * 處理token,更新過期時間 */ Auth.prototype.processToken = function (data) { data.create_at = new Date().getTime(); // 存儲token this.saveToken(data.openid, data); return AccessToken(data); }; /** * 根據(jù)授權獲取到的code,換取access token和openid * 獲取openid之后,可以調(diào)用`wechat.API`來獲取更多信息 * @param {String} code 授權獲取到的code */ Auth.prototype.getAccessToken = function (code) { return new Promise((resolve, reject) => { const url = "https://api.weixin.qq.com/sns/jscode2session"; //由于此框架版本很久沒有更新了,此處地址發(fā)生了變化,需要修改為以上地址,不然會出現(xiàn) //41008錯誤。這也是沒有直接使用框架,引用本地使用的原因。 // const url = "https://api.weixin.qq.com/sns/oauth2/access_token"; const info = { appid: this.appid, secret: this.appsecret, js_code: code, grant_type: "authorization_code", }; request.post(url, { form: info }, (err, res, body) => { if (err) { reject(err); } else { const data = JSON.parse(body); resolve(this.processToken(data)); } }); }); }; /** * 根據(jù)refresh token,刷新access token,調(diào)用getAccessToken后才有效 * @param {String} refreshToken refreshToken */ Auth.prototype.refreshAccessToken = function (refreshToken) { return new Promise((resolve, reject) => { const url = "https://api.weixin.qq.com/sns/oauth2/refresh_token"; var info = { appid: this.appid, grant_type: "refresh_token", refresh_token: refreshToken, }; request.post(url, { form: info }, (err, res, body) => { if (err) { reject(err); } else { const data = JSON.parse(body); resolve(this.processToken(data)); } }); }); }; /** * 根據(jù)openid,獲取用戶信息。 * 當access token無效時,自動通過refresh token獲取新的access token。然后再獲取用戶信息 * @param {Object|String} options 傳入openid或者參見Options */ Auth.prototype.getUser = async function (openid) { const data = this.getToken(openid); console.log("getUser", data); if (!data) { var error = new Error( "No token for " + options.openid + ", please authorize first." ); error.name = "NoOAuthTokenError"; throw error; } const token = AccessToken(data); var accessToken; if (token.isValid()) { accessToken = token.data.session_key; } else { var newToken = await this.refreshAccessToken(token.data.refresh_token); accessToken = newToken.data.session_key; } console.log("accessToken", accessToken); return await this._getUser(openid, accessToken); }; Auth.prototype._getUser = function (openid, accessToken, lang) { return new Promise((resolve, reject) => { const url = "https://api.weixin.qq.com/sns/userinfo"; const info = { access_token: accessToken, openid: openid, lang: lang || "zh_CN", }; request.post(url, { form: info }, (err, res, body) => { if (err) { reject(err); } else { resolve(JSON.parse(body)); } }); }); }; /** * 根據(jù)code,獲取用戶信息。 * @param {String} code 授權獲取到的code */ Auth.prototype.getUserByCode = async function (code) { const token = await this.getAccessToken(code); return await this.getUser(token.data.openid); }; module.exports = Auth;
Pelaksanaan kod log masuk program mini
<!--pages/index.wxml--> <view class="page-section"> <text class="page-section__title">微信登錄</text> <view class="btn-area"> <button bindtap="getUserProfile" type="primary">登錄</button> </view> </view>
// pages/index.js Page({ /** * 頁面的初始數(shù)據(jù) */ data: {}, // 正確的登錄方式 getUserProfile() { // 推薦使用wx.getUserProfile獲取用戶信息,開發(fā)者每次通過該接口獲取用戶個人信息均需用戶確認 // 開發(fā)者妥善保管用戶快速填寫的頭像昵稱,避免重復彈窗 wx.getUserProfile({ desc: "用于完善會員資料", // 聲明獲取用戶個人信息后的用途,后續(xù)會展示在彈窗中,請謹慎填寫 success: (res) => { let { userInfo, encryptedData, iv } = res; const requestLoginApi = (code) => { // 發(fā)起網(wǎng)絡請求 wx.request({ url: "http://localhost:3000/user/weixin-login", method: "POST", header: { "content-type": "application/json", }, data: { code, userInfo, encryptedData, iv, }, success(res) { console.log("請求成功", res.data); let token = res.data.data.authorizationToken; wx.setStorageSync("token", token); onUserLogin(token); console.log("authorization", token); }, fail(err) { console.log("請求異常", err); }, }); }; const onUserLogin = (token) => { getApp().globalData.token = token; wx.showToast({ title: "登錄成功了", }); }; //必須進行session是否過期檢查,不然會出現(xiàn)第一次點擊登錄,服務器報Illegal Buffer //的錯誤,但是第二次點擊登錄正常。 wx.checkSession({ success: (res) => { // session_key 未過期,并且在本生命周期一直有效 console.log("在登陸中"); let token = wx.getStorageSync("token"); if (token) onUserLogin(token); }, fail: (res) => { // session_key已經(jīng)失效,需要重新執(zhí)行登錄流程 wx.login({ success(res0) { if (res0.code) { requestLoginApi(res0.code); } else { console.log("登錄失敗!" + res0.errMsg); } }, }); }, }); }, }); }, });
Apakah pengoptimuman yang boleh dilakukan untuk kod log masuk?
Untuk perisian, pada peringkat kod, adalah perlu untuk mengejar aspek yang paling asas (jauh lebih daripada ini, tetapi mari kita lakukan ini dengan baik dahulu):
Kebolehselenggaraan (maintainability)
Apa yang dipanggil "penyelenggaraan" tidak lebih daripada mengubah suai pepijat, mengubah suai kod lama dan menambah kod baharu. Apa yang dipanggil "kod mudah diselenggara" bermakna kod itu boleh diubah suai atau ditambah dengan cepat tanpa memusnahkan reka bentuk kod asal atau memperkenalkan pepijat baharu. Apa yang dipanggil "kod tidak mudah diselenggara" bermakna mengubah suai atau menambah kod memerlukan risiko besar untuk memperkenalkan pepijat baharu dan mengambil masa yang lama untuk diselesaikan.
Kebolehbacaan
Guru reka bentuk perisian Martin Fowler pernah berkata: "Mana-mana orang bodoh boleh menulis kod yang boleh difahami oleh komputer. Pengaturcara yang baik menulis kod yang boleh difahami oleh manusia." ke dalam bahasa Cina: "Mana-mana orang bodoh boleh menulis kod yang boleh difahami oleh komputer. Pengaturcara yang baik boleh menulis kod yang boleh difahami oleh manusia malah terdapat pensijilan dalam Google yang dipanggil Kebolehbacaan." Hanya jurutera yang telah memperoleh pensijilan ini layak untuk meluluskan orang lain untuk menyerahkan kod semasa semakan kod. Ia dapat dilihat betapa pentingnya kebolehbacaan kod itu Lagipun, bilangan kali kod dibaca jauh melebihi bilangan kali ia ditulis dan dilaksanakan. Kita perlu menyemak sama ada kod itu mematuhi piawaian pengekodan, sama ada penamaan itu bermakna, sama ada ulasan terperinci, sama ada panjang fungsi sesuai, sama ada pembahagian modul jelas, sama ada ia memenuhi kohesi tinggi dan gandingan rendah, dsb.
Kebolehlanjutan (extensibility)
Extensibility juga merupakan kriteria yang sangat penting untuk menilai kualiti kod. Kod ini menyimpan beberapa titik sambungan fungsi Anda boleh memasukkan kod fungsi baharu terus ke titik sambungan tanpa perlu bersusah payah dan menukar sejumlah besar kod asal hanya untuk menambah fungsi.
Kebolehgunaan semula
代碼的可復用性可以簡單地理解為,盡量減少重復代碼的編寫,復用已有的代碼。
那么接下來就來優(yōu)化一下代碼吧:
模塊化
可以把登錄的代碼模塊化,代碼如下:
// lib/login.js function loginWithCallback(cb) { // 推薦使用wx.getUserProfile獲取用戶信息,開發(fā)者每次通過該接口獲取用戶個人信息均需用戶確認 // 開發(fā)者妥善保管用戶快速填寫的頭像昵稱,避免重復彈窗 wx.getUserProfile({ desc: "用于完善會員資料", // 聲明獲取用戶個人信息后的用途,后續(xù)會展示在彈窗中,請謹慎填寫 success: (res) => { let { userInfo, encryptedData, iv } = res; const requestLoginApi = (code) => { // 發(fā)起網(wǎng)絡請求 wx.request({ url: "http://localhost:3000/user/weixin-login", method: "POST", header: { "content-type": "application/json", }, data: { code, userInfo, encryptedData, iv, }, success(res) { console.log("請求成功", res.data); let token = res.data.data.authorizationToken; wx.setStorageSync("token", token); onUserLogin(token); console.log("authorization", token); }, fail(err) { console.log("請求異常", err); }, }); }; const onUserLogin = (token) => { getApp().globalData.token = token; wx.showToast({ title: "登錄成功了", }); if (cb && typeof cb == "function") cb(token); }; wx.checkSession({ success: (res) => { // session_key 未過期,并且在本生命周期一直有效 console.log("在登陸中"); let token = wx.getStorageSync("token"); if (token) onUserLogin(token); }, fail: (res) => { // session_key已經(jīng)失效,需要重新執(zhí)行登錄流程 wx.login({ success(res0) { if (res0.code) { requestLoginApi(res0.code); } else { console.log("登錄失敗!" + res0.errMsg); } }, }); }, }); }, }); } export default loginWithCallback;
Promise化
回調(diào)地獄問題,不利于代碼的閱讀,所以接下來我們基于Promise進行代碼優(yōu)化。有了 Promise 對象,就可以將異步操作以同步操作的流程表達出來,避免了層層嵌套的回調(diào)函數(shù)。此外,Promise 對象提供統(tǒng)一的接口,使得控制異步操作更加容易。
Promise的幾個方法簡介
方法名 | 說明 |
---|---|
Promise.prototype.then | 方法返回的是一個新的 Promise 對象,因此可以采用鏈式寫法。這種設計使得嵌套的異步操作,可以被很容易得改寫,從回調(diào)函數(shù)的"橫向發(fā)展"改為"向下發(fā)展"。 |
Promise.prototype.catch | 是 Promise.prototype.then(null, rejection) 的別名,用于指定發(fā)生錯誤時的回調(diào)函數(shù)。Promise 對象的錯誤具有"冒泡"性質,會一直向后傳遞,直到被捕獲為止。也就是說,錯誤總是會被下一個 catch 語句捕獲。 |
Promise.prototype.finally | 方法返回一個Promise 。在promise結束時,無論結果是fulfilled或者是rejected,都會執(zhí)行指定的回調(diào)函數(shù)。這為在Promise 是否成功完成后都需要執(zhí)行的代碼提供了一種方式。 |
Promise.all | 這避免了同樣的語句需要在then() 和catch() 中各寫一次的情況。Promise.all 方法用于將多個 Promise 實例,包裝成一個新的 Promise 實例。Promise.all 方法接受一個數(shù)組作為參數(shù),var p = Promise.all([p1,p2,p3]); p1、p2、p3 都是 Promise 對象的實例。(Promise.all 方法的參數(shù)不一定是數(shù)組,但是必須具有 iterator 接口,且返回的每個成員都是 Promise 實例。)p 的狀態(tài)由 p1、p2、p3 決定,分成兩種情況。 (1)只有p1、p2、p3的狀態(tài)都變成fulfilled,p的狀態(tài)才會變成fulfilled,此時p1、p2、p3的返回值組成一個數(shù)組,傳遞給p的回調(diào)函數(shù)。 (2)只要p1、p2、p3之中有一個被rejected,p的狀態(tài)就變成rejected,此時第一個被reject的實例的返回值,會傳遞給p的回調(diào)函數(shù)。 |
Promise.race | Promise.race 方法同樣是將多個 Promise 實例,包裝成一個新的 Promise 實例。var p = Promise.race([p1,p2,p3]); 上面代碼中,只要p1、p2、p3之中有一個實例率先改變狀態(tài),p的狀態(tài)就跟著改變。那個率先改變的Promise實例的返回值,就傳遞給p的返回值。 |
Promise.any | 接收一個Promise可迭代對象,只要其中的一個 promise 成功,就返回那個已經(jīng)成功的 promise 。所有子實例都處于rejected狀態(tài),總的promise才處于rejected狀態(tài)。 |
Promise.allSettled | 返回一個在所有給定的promise都已經(jīng)fulfilled 或rejected 后的promise,并帶有一個對象數(shù)組,每個對象表示對應的promise結果。相比之下,Promise.all() 更適合彼此相互依賴或者在其中任何一個reject 時立即結束。 |
小程序API接口Promise化并且把需要登錄的調(diào)用接口模塊化
1、安裝插件。請先查看npm支持文檔。
npm install --save miniprogram-api-promise
2、在微信開發(fā)者工具右方詳情中勾選使用npm模塊,并在菜單欄工具中點擊構建npm。
3、初始化代碼。
// app.js import {promisifyAll} from 'miniprogram-api-promise' import login from "../lib/login"; const wxp ={} promisifyAll(wx,wxp) // 需要token的請求統(tǒng)一處理登錄和設置header,并且處理錯誤信息 wxp.requestNeedLogin = async function (args) { let token = wx.getStorageSync("token"); if (!token) { token = await loginWithPromise(); } if (!args.header) args.header = {}; args.header["Authorization"] = `Bearer ${token}`; return wxp.request(args).catch(console.error); }; // app.js App({ wxp:wxp, });
4、改寫login.js代碼
// lib/login.js function login() { return new Promise((resolve, reject) => { // 推薦使用wx.getUserProfile獲取用戶信息,開發(fā)者每次通過該接口獲取用戶個人信息均需用戶確認 // 開發(fā)者妥善保管用戶快速填寫的頭像昵稱,避免重復彈窗 wx.getUserProfile({ desc: "用于完善會員資料", // 聲明獲取用戶個人信息后的用途,后續(xù)會展示在彈窗中,請謹慎填寫 success:async (res0) => { let { userInfo, encryptedData, iv } = res0; const app = getApp(); try { app.wxp.checkSession(); } catch (err) { reject(err); } let token = wx.getStorageSync("token"); if (!token) { let res1 = await app.wxp.login().catch(err => reject(err)); let code = res1.code; let res = await app.wxp.request({ url: "http://localhost:3000/user/weixin-login", method: "POST", header: { "content-type": "application/json", }, data: { code, userInfo, encryptedData, iv, } }).catch(err => reject(err)); token = res.data.data.authorizationToken; wx.setStorageSync("token", token); app.globalData.token = token; wx.showToast({ title: "登錄成功了", }); resolve(token); } }, }); }) } export default login;
5、調(diào)用代碼
<view class="container page-head"> <text class="page-section__title">需要登錄的請求調(diào)用</text> <view class="btn-area"> <button bindtap="request1" type="primary">請求1</button> <button bindtap="request2" type="primary">請求2</button> </view> </view>
// pages/index.js Page({ /** * 頁面的初始數(shù)據(jù) */ data: {}, request1() { getApp().wxp.requestNeedLogin({ url: "http://localhost:3000/user/home?name=andying", }).then(console.log) }, request2() { getApp().wxp.requestNeedLogin({ url: "http://localhost:3000/user/home?name=eva", }).then(console.log) }, });
【相關學習推薦:小程序開發(fā)教程】
Atas ialah kandungan terperinci Analisis ringkas tentang cara melaksanakan fungsi log masuk dalam program mini. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undress AI Tool
Gambar buka pakaian secara percuma

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Dengan perkembangan pesat media sosial, Xiaohongshu telah menjadi platform popular untuk ramai anak muda untuk berkongsi kehidupan mereka dan meneroka produk baharu. Semasa penggunaan, kadangkala pengguna mungkin menghadapi kesukaran untuk log masuk ke akaun sebelumnya. Artikel ini akan membincangkan secara terperinci cara menyelesaikan masalah log masuk ke akaun lama di Xiaohongshu, dan cara menangani kemungkinan kehilangan akaun asal selepas menukar pengikatan. 1. Bagaimana untuk log masuk ke akaun sebelumnya Xiaohongshu? 1. Dapatkan kata laluan dan log masuk. Jika anda tidak log masuk ke Xiaohongshu untuk masa yang lama, akaun anda mungkin dikitar semula oleh sistem. Untuk memulihkan hak akses, anda boleh cuba log masuk ke akaun anda sekali lagi dengan mendapatkan semula kata laluan anda. Langkah-langkah operasi adalah seperti berikut: (1) Buka Aplikasi Xiaohongshu atau laman web rasmi dan klik butang "Log Masuk". (2) Pilih "Retrieve Password". (3) Masukkan nombor telefon bimbit yang anda gunakan semasa mendaftar akaun anda

Apabila anda log masuk ke akaun stim orang lain pada komputer anda, dan akaun orang lain itu kebetulan mempunyai perisian kertas dinding, stim akan memuat turun kertas dinding yang dilanggan ke akaun orang lain secara automatik selepas bertukar kembali ke akaun anda sendiri Pengguna boleh menyelesaikan masalah ini dengan mematikan penyegerakan awan wap. Apa yang perlu dilakukan jika enjin kertas dinding memuat turun kertas dinding orang lain selepas log masuk ke akaun lain 1. Log masuk ke akaun stim anda sendiri, cari penyegerakan awan dalam tetapan, dan matikan penyegerakan awan stim. 2. Log masuk ke akaun Steam orang lain yang anda log masuk sebelum ini, buka Bengkel Kreatif Kertas Dinding, cari kandungan langganan, dan kemudian batalkan semua langganan. (Sekiranya anda tidak dapat mencari kertas dinding pada masa hadapan, anda boleh mengumpulnya dahulu dan kemudian membatalkan langganan) 3. Tukar semula ke wap anda sendiri

Baru-baru ini, beberapa rakan telah bertanya kepada saya bagaimana untuk log masuk ke versi komputer Kuaishou Berikut adalah kaedah log masuk untuk versi komputer Kuaishou Rakan yang memerlukannya boleh datang dan mengetahui lebih lanjut. Langkah 1: Mula-mula, cari tapak web rasmi Kuaishou di Baidu dalam penyemak imbas komputer anda. Langkah 2: Pilih item pertama dalam senarai hasil carian. Langkah 3: Selepas memasuki halaman utama laman web rasmi Kuaishou, klik pada pilihan video. Langkah 4: Klik pada avatar pengguna di sudut kanan atas. Langkah 5: Klik kod QR untuk log masuk dalam menu log masuk pop timbul. Langkah 6: Kemudian buka Kuaishou pada telefon anda dan klik pada ikon di sudut kiri atas. Langkah 7: Klik pada logo kod QR. Langkah 8: Selepas mengklik ikon imbasan di penjuru kanan sebelah atas antara muka kod QR Saya, imbas kod QR pada komputer anda. Langkah 9: Akhirnya log masuk ke versi komputer Kuaishou

Beribu-ribu hantu menjerit di pergunungan dan padang, dan bunyi penyerahan senjata hilang. Jeneral hantu yang bergegas ke atas pergunungan, dengan semangat juang yang berkobar-kobar di dalam hati mereka, menggunakan api sebagai sangkakala mereka untuk memimpin ratusan hantu untuk menyerang. ke dalam pertempuran. [Blazing Flame Bairen·Kulit Koleksi Doji Ibaraki kini dalam talian] Tanduk hantu berkobar-kobar dengan nyala api, mata yang disepuh dipenuhi dengan semangat juang yang sukar dikawal, dan kepingan perisai jed putih menghiasi baju, menunjukkan momentum yang tidak terkawal dan liar yang hebat. syaitan. Pada lengan baju yang berkibar-kibar seputih salji, nyala api merah melekat dan berjalin, dan corak emas dicetak pada mereka, menyalakan warna merah lembayung dan ajaib. Wasiat-o'-the-wips yang dibentuk oleh kuasa syaitan pekat meraung, dan api yang ganas menggoncang gunung Iblis dan hantu yang telah kembali dari api penyucian, mari kita menghukum penceroboh itu bersama-sama. [Bingkai avatar dinamik eksklusif·Blazing Flame Bailian] [Ilustrasi eksklusif·Firework General Soul] [Penghargaan Biografi] [Cara mendapatkan] Kulit koleksi Ibaraki Doji·Blazing Flame Bailian akan tersedia di kedai kulit selepas penyelenggaraan pada 28 Disember.

Penyelesaian masalah log masuk latar belakang Discuz didedahkan. ramai webmaster. Walau bagaimanapun, dengan tepat kerana fungsinya yang berkuasa, kadangkala kami menghadapi beberapa masalah semasa menggunakan Discuz, seperti masalah log masuk latar belakang. Hari ini, kami akan mendedahkan penyelesaian kepada masalah log masuk latar belakang Discuz dan memberikan contoh kod khusus, dengan harapan dapat membantu mereka yang memerlukan

Xiaohongshu kini telah disepadukan ke dalam kehidupan seharian ramai orang, dan kandungannya yang kaya serta kaedah operasi yang mudah membuatkan pengguna menikmatinya. Kadang-kadang, kita mungkin terlupa kata laluan akaun Memang menjengkelkan untuk hanya mengingati akaun tetapi tidak boleh log masuk. 1. Bagaimana untuk log masuk jika Xiaohongshu hanya mengingati akaun tersebut? Apabila kami terlupa kata laluan kami, kami boleh log masuk ke Xiaohongshu melalui kod pengesahan pada telefon bimbit kami. Operasi khusus adalah seperti berikut: 1. Buka Aplikasi Xiaohongshu atau versi web Xiaohongshu 2. Klik butang "Log Masuk" dan pilih "Log Masuk Akaun dan Kata Laluan" 3. Klik butang "Lupa kata laluan anda?" . Masukkan nombor akaun anda Klik "Seterusnya"; 5. Sistem akan menghantar kod pengesahan ke telefon bimbit anda, masukkan kod pengesahan dan klik "OK"; Anda juga boleh menggunakan akaun pihak ketiga (seperti

Melaksanakan kesan flipping kad dalam program mini WeChat Dalam program mini WeChat, melaksanakan kesan flipping kad ialah kesan animasi biasa yang boleh meningkatkan pengalaman pengguna dan daya tarikan interaksi antara muka. Yang berikut akan memperkenalkan secara terperinci cara melaksanakan kesan khas flipping kad dalam applet WeChat dan memberikan contoh kod yang berkaitan. Pertama, anda perlu menentukan dua elemen kad dalam fail susun atur halaman program mini, satu untuk memaparkan kandungan hadapan dan satu untuk memaparkan kandungan belakang Kod sampel khusus adalah seperti berikut: <!--index.wxml-. ->&l

Baidu Netdisk bukan sahaja boleh menyimpan pelbagai sumber perisian, tetapi juga berkongsinya dengan orang lain Ia menyokong penyegerakan berbilang terminal Jika komputer anda tidak memuat turun klien, anda boleh memilih untuk memasuki versi web. Jadi bagaimana untuk log masuk ke versi web Baidu Netdisk? Mari kita lihat pengenalan terperinci. Pintu masuk masuk versi web Baidu Netdisk: https://pan.baidu.com (salin pautan ke pelayar untuk dibuka) Pengenalan perisian 1. Perkongsian Menyediakan fungsi perkongsian fail, pengguna boleh menyusun fail dan berkongsi dengan rakan-rakan yang memerlukan. 2. Awan: Ia tidak mengambil terlalu banyak memori Kebanyakan fail disimpan dalam awan, dengan berkesan menjimatkan ruang komputer. 3. Album foto: Menyokong fungsi album foto awan, mengimport foto ke cakera awan, dan kemudian menyusunnya untuk dilihat oleh semua orang. ,
