HarmonyOS鸿蒙Next登录开发总结

HarmonyOS鸿蒙Next登录开发总结

1.开发准备

在开发具备用户身份认证的应用前,需要先申请权限ohos.permission.INTERNET,应用才能具备联网权限进行身份认证。该权限授权方式为system_grant(系统授权),开发者只需要在module.json5配置文件的requestPermissions标签中声明权限,即可获取系统授权。

准备axios三方库利用axios封装登录http请求 打开终端输入ohpm install @ohos/axios 即可下载好该插件最后同步至项目就能全局调用了

2.封装axios请求

登录的关键代码就是发送post请求到指定的登陆页面的url然后传给web组件完成登录操作

/**
 * post请求
 * @param url url请求地址
 * @param params 请求参数
 * @returns 指定类型数据
 */
post<TParam, TResponse>(url: string, params?: TParam, contentType?: TnxHttpContentType, isFullUrl?: boolean): Promise<TResponse> {
    let realParams = contentType !== TnxHttpContentType.URL ? params : CommonTools.buildJson2UrlParams(params);
    return this.http!.post(url, realParams, {
        params: { isFullUrl },
        headers: this.getRequestHeaders(contentType)
    });
}

3.用封装的Web组件封装登录页面和请求

WebViews({
    webviewSrc: this.url,
    onLoadIntercept: (data: WebResourceRequest) => {
        const url = data.getRequestUrl();
        const callBackUrl = `${this.linkDomain}${apiUrls.link.teslaCallback}`;
        if(url.startsWith(callBackUrl)) {
            // 解析url, 取除code
            const code = CommonTools.getUrlValue(url, 'code');
            // post请求拿token
            http.post(apiUrls.login.teslaToken, { code, email: this.userLoginEmail } as ESObject)
            .then((res: TnxUser) => {
                const token: string = res.auth_token.key;
                AppStorage.setOrCreate(TNX_USER_TOKEN, token);
                let data:emitter.EventData ={data:{
                    token:true,
                }}
                // 告诉已经订阅登录状态的页面 完成了登录并且存好了token
                // 发布事件 通知全局拿到token并且刷新UI
                EventBus.getInstance().post(AppEvent.EVENT_TEST,data)
                // 关闭登录页,打开首页
                this.closeAllModal();
                promptAction.showToast({ message: '登录成功!' });
            },
            () => {
                // 回到初始登录页
                this.isShowLogin = false;
            });
            return true;
        }
        return false;
    },
    onPageEnd: (url: string, controller: webview.WebviewController) => {
        controller.runJavaScript("document.getElementsByClassName('tds-flex-item')[0].innerText",
        (error: BusinessError, result: string) => {
            if(result !== "null") {
                let email = result.replaceAll(`\"`, "").trim();
                if(email) {
                    this.userLoginEmail = email;
                    // 将输入的邮箱持久化到磁盘
                    data_preferences.getPreferences(this.context, 'userInfo').then(preferences => {
                        preferences.put('userLoginEmail',this.userLoginEmail).then(() => {
                            preferences.flush()
                        })
                    })
                }
            }
        });
    }
})

4.封装的web组件

关键点 incognitoMode:true 和 webview.WebCookieManager.clearAllCookiesSync(true); 开启隐私模式否则第二次登陆会默认之前输入的账号密码 设置这两个参数能够清空web组件的cookie和一些保存的隐私信息

Web({
    src: this.webviewSrc,
    controller: this.controller,
    incognitoMode:true // 开启隐私模式
})
.javaScriptAccess(true)
.domStorageAccess(true)
.onLoadIntercept((event: OnLoadInterceptEvent) => {
    return this.onLoadIntercept ? this.onLoadIntercept(event.data) : false;
})
.onPageEnd((event: OnPageEndEvent) => {
    this.onPageEnd && this.onPageEnd(event.url, this.controller);
})
.onDisAppear(()=>{
    this.controller.removeCache(true)
    webview.WebCookieManager.clearAllCookiesSync(true);
})

更多关于HarmonyOS鸿蒙Next登录开发总结的实战教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

HarmonyOS鸿蒙Next登录开发主要涉及使用ArkTS语言进行UI设计和业务逻辑实现。开发者需通过@State@Prop等装饰器管理组件状态,利用@Entry@Component定义页面和组件。登录功能通常包括账号密码输入、验证码获取、登录按钮点击等交互,需调用http模块进行网络请求,处理返回数据。开发者还需关注安全机制,如数据加密、防重放攻击等。

更多关于HarmonyOS鸿蒙Next登录开发总结的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


从代码来看,这是一个完整的HarmonyOS Next登录功能实现方案,主要包含以下几个关键技术点:

  1. 权限配置
  • 正确配置了ohos.permission.INTERNET网络权限
  • 使用system_grant方式获取系统授权
  1. HTTP请求封装
  • 使用ohpm安装axios三方库
  • 实现了泛型化的post请求方法
  • 处理了不同contentType的参数转换
  1. Web组件集成
  • 通过Web组件加载登录页面
  • 使用onLoadIntercept拦截回调URL
  • 从URL中解析授权码code
  1. 登录流程
  • 获取code后调用token接口
  • 成功后将token存入AppStorage
  • 使用EventBus通知全局登录状态变更
  • 关闭登录页并跳转首页
  1. 数据持久化
  • 使用data_preferences存储用户邮箱
  • 调用flush确保数据立即写入
  1. 隐私保护
  • 设置incognitoMode开启隐私模式
  • 使用WebCookieManager.clearAllCookiesSync清理cookies
  • 页面消失时调用removeCache清理缓存

整体实现考虑全面,涵盖了登录流程的各个环节,特别是隐私和安全方面的处理很到位。代码结构清晰,使用了TypeScript的类型特性,是一个不错的HarmonyOS Next登录功能参考实现。

回到顶部