login_apple.vue 2.7 KB
<template>
	<div class="container">
		<h3>登陆</h3>
		<button @click="appleLogin">使用苹果账号登陆</button>
	</div>
</template>

<script>
	import {
		transformImageCodeToUri
	} from "@/utils/image_utils.js";
	import {
		default as http
	} from "@/utils/http.js";
	
	import loginHelper from "../../utils/loginHelper.js";
	
	export default {
		methods: {
			async appleLogin() {
				console.info(`begin appleLogin`);
				uni.login({
					provider: 'apple',
					success: async function(loginRes) {
						// 登录成功
						uni.getUserInfo({
							provider: 'apple',
							success:async function(info) {
								// 获取用户信息成功, info.authResult中保存登录认证数据
								console.info(`get user info success:`, info);
								// 登陆成功,发送token给服务端进行验证
								// this.$http.post('/api/apple-login', {
								// 	token: response.token
								// }).then((response) => {
								// 	// 处理服务端返回的登陆信息
								// })
								try{
									let query_data = `mutation{
										ydn_apple_login(open_id:${JSON.stringify(info.userInfo.openId)},token:${JSON.stringify(info.userInfo.identityToken)},authorization_code:${JSON.stringify(info.userInfo.authorizationCode)})
									}`;
									console.info(`begin query data:`,query_data);
									let result = await http.gql({
										query: query_data
									})
									this.loginBtnLoading = false;
									console.info(`ydn_apple_login result `,result);
									
									if (result && result.data && result.data.ydn_apple_login) {
										if (!result.data.ydn_apple_login.Error) {
											result.data.ydn_apple_login.Result.FaceImageCode = transformImageCodeToUri(result.data.ydn_apple_login
												.Result
												.FaceImageCode);
									
											loginHelper.login(result.data.ydn_apple_login.Result , result.data.ydn_apple_login.AppToken)
											console.log("login")
											uni.navigateBack();
											return
										} else {
											uni.showToast({
												icon: "none",
												title: result.data.ydn_apple_login.Error,
											});
										}
									
									} else {
										uni.showToast({
											icon: "none",
											title: "登录异常",
										});
										return;
									}
								}catch(e){
									console.info(e);
								}
							}
						})
					},
					fail: function(err) {
						// 登录授权失败  
						// err.code错误码参考`授权失败错误码(code)说明`
						console.info(`get user info error:`, err);

					}
				});
			}
		}
	}
</script>

<style lang="scss" scoped>
	.container {
		display: flex;
		flex-direction: column;
		align-items: center;
		justify-content: center;
		height: 100vh;
	}
</style>