xugenyuan

ref |> 对接华为账号登录接口

Signed-off-by: xugenyuan <xugenyuan@wondertek.com.cn>
@@ -82,6 +82,30 @@ export class LoginModel { @@ -82,6 +82,30 @@ export class LoginModel {
82 }) 82 })
83 } 83 }
84 84
  85 + // loginType 0:手机号密码 2:手机号登录 3:QQ 4:微信 5:微博 6:APPLEID 7:手机号一键登录8:账号+密码 9:华为一键登录
  86 + thirdPartLogin(loginType: number, otherParams: Record<string, string|number>) {
  87 + otherParams['loginType'] = loginType
  88 + otherParams['deviceId'] = HttpUtils.getDeviceId()
  89 +
  90 + return new Promise<LoginBean>((success, fail) => {
  91 + HttpRequest.post<ResponseDTO<LoginBean>>(HttpUrlUtils.getAppLoginUrl(), otherParams).then((data: ResponseDTO<LoginBean>) => {
  92 + Logger.debug("LoginViewModel:success2 ", data.message)
  93 + if (!data) {
  94 + fail("数据为空")
  95 + return
  96 + }
  97 + if (!data.data||data.code != 0) {
  98 + fail(data.message)
  99 + return
  100 + }
  101 + success(data.data)
  102 + }, (error: Error) => {
  103 + fail(error.message)
  104 + Logger.debug("LoginViewModel:error2 ", error.toString())
  105 + })
  106 + })
  107 + }
  108 +
85 // {"password":"523acd319228efde34e8a30268ee8ca5e4fc421d72affa531676e1765940d22c","phone":"13625644528","loginType":0,"oldPassword":"BA5FD74F827AF9B271FE17CADC489C36","deviceId":"60da5af6-9c59-3566-8622-8c6c00710994"} 109 // {"password":"523acd319228efde34e8a30268ee8ca5e4fc421d72affa531676e1765940d22c","phone":"13625644528","loginType":0,"oldPassword":"BA5FD74F827AF9B271FE17CADC489C36","deviceId":"60da5af6-9c59-3566-8622-8c6c00710994"}
86 appLoginByPassword(phone: string, loginType: number, password: string, oldPassword: string) { 110 appLoginByPassword(phone: string, loginType: number, password: string, oldPassword: string) {
87 let bean: Record<string, string | number> = {}; 111 let bean: Record<string, string | number> = {};
@@ -47,15 +47,18 @@ export class LoginViewModel { @@ -47,15 +47,18 @@ export class LoginViewModel {
47 47
48 return new Promise<LoginBean>((success, fail) => { 48 return new Promise<LoginBean>((success, fail) => {
49 this.loginModel.appLogin(phone, loginType, verificationCode).then((data: LoginBean) => { 49 this.loginModel.appLogin(phone, loginType, verificationCode).then((data: LoginBean) => {
50 - SPHelper.default.saveSync(SpConstants.USER_FIRST_MARK, data.firstMark)  
51 - SPHelper.default.saveSync(SpConstants.USER_ID, data.id)  
52 - SPHelper.default.saveSync(SpConstants.USER_JWT_TOKEN, data.jwtToken)  
53 - SPHelper.default.saveSync(SpConstants.USER_LONG_TIME_NO_LOGIN_MARK, data.longTimeNoLoginMark)  
54 - SPHelper.default.saveSync(SpConstants.USER_REFRESH_TOKEN, data.refreshToken)  
55 - SPHelper.default.saveSync(SpConstants.USER_STATUS, data.status)  
56 - SPHelper.default.saveSync(SpConstants.USER_Type, data.userType)  
57 - SPHelper.default.saveSync(SpConstants.USER_NAME, data.userName)  
58 - EmitterUtils.sendEmptyEvent(EmitterEventId.LOGIN_SUCCESS) 50 + this.dealWithLoginSuccess(data)
  51 + success(data)
  52 + }).catch((error:string) => {
  53 + fail(error)
  54 + })
  55 + })
  56 + }
  57 +
  58 + huaweiOneKeyLogin(authCode: string) {
  59 + return new Promise<LoginBean>((success, fail) => {
  60 + this.loginModel.thirdPartLogin(9, {"idToken": authCode}).then((data: LoginBean) => {
  61 + this.dealWithLoginSuccess(data)
59 success(data) 62 success(data)
60 }).catch((error:string) => { 63 }).catch((error:string) => {
61 fail(error) 64 fail(error)
@@ -63,6 +66,19 @@ export class LoginViewModel { @@ -63,6 +66,19 @@ export class LoginViewModel {
63 }) 66 })
64 } 67 }
65 68
  69 + //TODO: 这里要整体改掉
  70 + dealWithLoginSuccess(data: LoginBean) {
  71 + SPHelper.default.saveSync(SpConstants.USER_FIRST_MARK, data.firstMark)
  72 + SPHelper.default.saveSync(SpConstants.USER_ID, data.id)
  73 + SPHelper.default.saveSync(SpConstants.USER_JWT_TOKEN, data.jwtToken)
  74 + SPHelper.default.saveSync(SpConstants.USER_LONG_TIME_NO_LOGIN_MARK, data.longTimeNoLoginMark)
  75 + SPHelper.default.saveSync(SpConstants.USER_REFRESH_TOKEN, data.refreshToken)
  76 + SPHelper.default.saveSync(SpConstants.USER_STATUS, data.status)
  77 + SPHelper.default.saveSync(SpConstants.USER_Type, data.userType)
  78 + SPHelper.default.saveSync(SpConstants.USER_NAME, data.userName)
  79 + EmitterUtils.sendEmptyEvent(EmitterEventId.LOGIN_SUCCESS)
  80 + }
  81 +
66 async appLoginByPassword(phone: string, loginType: number, password: string, oldPassword: string) { 82 async appLoginByPassword(phone: string, loginType: number, password: string, oldPassword: string) {
67 let newLoginType: number 83 let newLoginType: number
68 let isPhone = this.verifyIsPhoneNumber(phone) 84 let isPhone = this.verifyIsPhoneNumber(phone)
@@ -75,15 +91,7 @@ export class LoginViewModel { @@ -75,15 +91,7 @@ export class LoginViewModel {
75 let passwordNew = await this.doMd(password) 91 let passwordNew = await this.doMd(password)
76 Logger.debug(TAG, "PASSWORD:" + passwordNew) 92 Logger.debug(TAG, "PASSWORD:" + passwordNew)
77 this.loginModel.appLoginByPassword(phone, newLoginType, passwordNew, oldPassword).then((data: LoginBean) => { 93 this.loginModel.appLoginByPassword(phone, newLoginType, passwordNew, oldPassword).then((data: LoginBean) => {
78 - SPHelper.default.saveSync(SpConstants.USER_FIRST_MARK, data.firstMark)  
79 - SPHelper.default.saveSync(SpConstants.USER_ID, data.id)  
80 - SPHelper.default.saveSync(SpConstants.USER_JWT_TOKEN, data.jwtToken)  
81 - SPHelper.default.saveSync(SpConstants.USER_LONG_TIME_NO_LOGIN_MARK, data.longTimeNoLoginMark)  
82 - SPHelper.default.saveSync(SpConstants.USER_REFRESH_TOKEN, data.refreshToken)  
83 - SPHelper.default.saveSync(SpConstants.USER_STATUS, data.status)  
84 - SPHelper.default.saveSync(SpConstants.USER_Type, data.userType)  
85 - SPHelper.default.saveSync(SpConstants.USER_NAME, data.userName)  
86 - EmitterUtils.sendEmptyEvent(EmitterEventId.LOGIN_SUCCESS) 94 + this.dealWithLoginSuccess(data)
87 success(data) 95 success(data)
88 }).catch((value: string) => { 96 }).catch((value: string) => {
89 fail(value) 97 fail(value)
@@ -3,13 +3,30 @@ import { Params } from 'wdBean/Index' @@ -3,13 +3,30 @@ import { Params } from 'wdBean/Index'
3 import { WDRouterPage, WDRouterRule } from 'wdRouter/Index' 3 import { WDRouterPage, WDRouterRule } from 'wdRouter/Index'
4 import HuaweiAuth from '../../utils/HuaweiAuth' 4 import HuaweiAuth from '../../utils/HuaweiAuth'
5 import { BusinessError } from '@kit.BasicServicesKit' 5 import { BusinessError } from '@kit.BasicServicesKit'
6 -import { ToastUtils } from 'wdKit/Index' 6 +import { Logger, ToastUtils, CustomToast, EmitterUtils, EmitterEventId } from 'wdKit/Index'
  7 +import { LoginViewModel } from './LoginViewModel'
  8 +import {InterestsHobbiesModel} from '../../../../../../../products/phone/src/main/ets/pages/viewModel/InterestsHobbiesModel'
  9 +
  10 +const TAG = "OneKeyLoginPage"
7 11
8 @Entry 12 @Entry
9 @Component 13 @Component
10 struct OneKeyLoginPage { 14 struct OneKeyLoginPage {
11 anonymousPhone: string = '' 15 anonymousPhone: string = ''
12 @State agreeProtocol: boolean = false 16 @State agreeProtocol: boolean = false
  17 + viewModel: LoginViewModel = new LoginViewModel()
  18 + @State toastText:string = ""
  19 + dialogToast: CustomDialogController = new CustomDialogController({
  20 + builder: CustomToast({
  21 + msg: this.toastText,
  22 + }),
  23 + autoCancel: false,
  24 + alignment: DialogAlignment.Center,
  25 + offset: { dx: 0, dy: -20 },
  26 + gridCount: 1,
  27 + customStyle: true,
  28 + maskColor:"#00000000"
  29 + })
13 30
14 aboutToAppear(): void { 31 aboutToAppear(): void {
15 this.anonymousPhone = HuaweiAuth.sharedInstance().anonymousPhone||"" 32 this.anonymousPhone = HuaweiAuth.sharedInstance().anonymousPhone||""
@@ -44,17 +61,7 @@ struct OneKeyLoginPage { @@ -44,17 +61,7 @@ struct OneKeyLoginPage {
44 if (!this.agreeProtocol) { 61 if (!this.agreeProtocol) {
45 return 62 return
46 } 63 }
47 - HuaweiAuth.sharedInstance().oneKeyLogin().then((authorizeCode) => {  
48 - //TODO: 调用服务端接口登录  
49 -  
50 - ToastUtils.shortToast("获取到授权code: " + authorizeCode + ",由于需要后台接口支持,暂时先跳转其他登录方式")  
51 - setTimeout(() => {  
52 - router.replaceUrl({url: WDRouterPage.loginPage.url()})  
53 - }, 3000)  
54 -  
55 - }).catch((error: BusinessError) => {  
56 -  
57 - }) 64 + this.requestLogin()
58 }) 65 })
59 } 66 }
60 .padding({ left: 25, right: 25 }) 67 .padding({ left: 25, right: 25 })
@@ -113,4 +120,47 @@ struct OneKeyLoginPage { @@ -113,4 +120,47 @@ struct OneKeyLoginPage {
113 }.margin({ top: 15, right: 15 }) 120 }.margin({ top: 15, right: 15 })
114 .width("100%") 121 .width("100%")
115 } 122 }
  123 +
  124 + async requestLogin() {
  125 + try {
  126 + let authorizeCode = await HuaweiAuth.sharedInstance().oneKeyLogin()
  127 +
  128 + let data = await this.viewModel.huaweiOneKeyLogin(authorizeCode)
  129 +
  130 + Logger.debug(TAG, "requestLogin: " + data.jwtToken)
  131 + this.showToastTip('登录成功')
  132 +
  133 + ///同步兴趣tag
  134 + let interestsModel = new InterestsHobbiesModel()
  135 + interestsModel.updateInterests()
  136 + this.queryUserDetail()
  137 + EmitterUtils.sendEvent(EmitterEventId.PEOPLE_SHIP_ATTENTION)
  138 +
  139 + } catch (error) {
  140 + if (typeof error == "string") {
  141 + this.showToastTip(error)
  142 + } else {
  143 + (error as BusinessError)
  144 + this.showToastTip("登录失败")
  145 + }
  146 + }
  147 + }
  148 +
  149 + showToastTip(msg:string){
  150 + this.toastText = msg
  151 + this.dialogToast.open()
  152 + }
  153 +
  154 + queryUserDetail(){
  155 + this.viewModel.queryUserDetail().then(()=>{
  156 + router.back({
  157 + url: `${WDRouterPage.getBundleInfo()}`
  158 + }
  159 + )
  160 + }).catch(()=>{
  161 + router.back({
  162 + url: `${WDRouterPage.getBundleInfo()}`
  163 + })
  164 + })
  165 + }
116 } 166 }