uniapp一鍵登錄


一、整理思路

un-app官網提供多種實現一鍵登錄的方法,這里的選擇是 自有服務器調用

二、uni-app准備賬號

1、un-app官網注冊賬號,並在dcloud開發者中心創建應用

2、開通一鍵登錄服務 保管好 ApiKey 和 ApiSecret

3、點擊右下角的添加應用並提交申請

4、添加服務空間

三、uni-app開通一鍵登錄

1、uni-app項目開通uniCloud服務

關聯雲空間選擇阿里雲或騰訊雲均可

2、新建雲函數

3、新建雲函數后會有一個index.js生成,粘貼以下代碼

	'use strict';
	const crypto = require('crypto')
	exports.main = async (event, context) => {
		//event為客戶端上傳的參數
		console.log('event : ', event);
		console.log('參數', event.queryStringParameters);
		// event里包含着客戶端提交的參數
		const res = await uniCloud.getPhoneNumber({
			appid: '###', // 替換成自己開通一鍵登錄的應用的DCloud appid,使用callFunction方式調用時可以不傳(會自動取當前客戶端的appid),如果使用雲函數URL化的方式訪問必須傳此參數
			provider: 'univerify',
			apiKey: '###, // 在開發者中心開通服務並獲取apiKey
			apiSecret: '###', // 在開發者中心開通服務並獲取apiSecret
			access_token: event.queryStringParameters.access_token,
			openid: event.queryStringParameters.openid
		})
		console.log('res',res); // res里包含手機號
		// 執行用戶信息入庫等操作,正常情況下不要把完整手機號返回給前端
		// 如果數據庫在uniCloud上,可以直接入庫
		// 如果數據庫不在uniCloud上,可以通過 uniCloud.httpclient API,將手機號通過http方式傳遞給其他服務器的接口,詳見:https://uniapp.dcloud.net.cn/uniCloud/cf-functions?id=httpclient
		return {
			code: 0,
			message: '獲取手機號成功',
			data:res
		}
	};

4、保存后上傳部署到雲空間

5、勾選一鍵登錄(項目中的 manifest.json)

四、項目編碼

1、調取一鍵登錄

官方有示例代碼 查看

uni.login({
	provider: 'univerify',
	success(res) { // 登錄成功
		console.log(res.authResult); // {openid:'登錄授權唯一標識',access_token:'接口返回的 token'}
		res.authResult.accessToken = res.authResult.access_token
		return that.$request({
			method: 'POST',
			url: '后台做具體邏輯的接口',
			data: res.authResult
		}).then(res => {
			uni.closeAuthView() //成功關閉授權頁面
			console.log('登錄成功', res)
			if (res.code) return
			that.$store.commit('setToken', res.data)
			that.$util.msg('登錄成功')
			setTimeout(() => {
				uni.redirectTo({
					url: '登陸成功跳轉的目標頁面'
				})
			}, 500)
		})
	},
	fail(res) { // 登錄失敗
		console.log(res.errCode)
		console.log(res.errMsg)
	}
})

2、日志可以再雲函數列表查看

雲函數可在雲函數列表查看

3、雲函數url化

在雲函數列表點擊詳情,下拉到底部點擊編輯設置一個url

4、后台寫具體邏輯

5、需要的工具類

1、HeaUtil.java

	public class HeaUtil {
    /**
     * sha256_HMAC加密
     *
     * @param message 消息
     * @param secret  秘鑰
     * @return 加密后字符串
     */
    public static String sha256_HMAC(String message, String secret) {
        String hash = "";
        try {
            Mac sha256_HMAC = Mac.getInstance("HmacSHA256");
            SecretKeySpec secret_key = new SecretKeySpec(secret.getBytes(), "HmacSHA256");
            sha256_HMAC.init(secret_key);
            byte[] bytes = sha256_HMAC.doFinal(message.getBytes());
            hash = byteArrayToHexString(bytes);
        } catch (Exception e) {
            System.out.println("Error HmacSHA256 ===========" + e.getMessage());
        }
        return hash;

    }

    /**
     * 將加密后的字節數組轉換成字符串
     *
     * @param b 字節數組
     * @return 字符串
     */
    private static String byteArrayToHexString(byte[] b) {
        StringBuilder hs = new StringBuilder();
        String stmp;
        for (int n = 0; b != null && n < b.length; n++) {
            stmp = Integer.toHexString(b[n] & 0XFF);
            if (stmp.length() == 1)
                hs.append('0');
            hs.append(stmp);
        }
        return hs.toString().toLowerCase();
    }
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM