【web页面接入Apple/google/facebook三方登录】

发布于:2025-07-27 ⋅ 阅读:(17) ⋅ 点赞:(0)

web页面接入Apple/谷歌/脸书三方登录


前言

web页面除了账号登录外,一般还会接入三方登录,例如apple登录,google登录,facebook登录.接入方式如下.


一、apple登录

apple登录,就是使用苹果账号登录,ios系统中都是使用apple账号密码登录自己的手机用户中心

使用步骤

1.入口文件index.html引入js文件

代码如下(示例):

<script type="text/javascript" src="https://appleid.cdn-apple.com/appleauth/static/jsapi/appleid/1/en_US/appleid.auth.js"></script>

2.vue页面初始化支付按钮,并且点击按钮登录

<div id="appleid-signin" data-color="black" data-border="true" data-type="sign in" @click="iosLogin()"></div>
import {
  overseaIosLogin,
} from "../api/api";
export default {
	data() {
	    return {
	    	IOSLoginData: {},
	    }
	},
	created() {
		// 监听apple登录的结果
		const that = this;
		 document.addEventListener('AppleIDSignInOnSuccess', (event) => {
	        // alert("ios登录成功");
	        that.IOSLoginData = event.detail.authorization;
	        that.overseaIosLoginFun(event.detail.authorization);
    	});
	    document.addEventListener('AppleIDSignInOnFailure', (event) => {
        	// Toast.fail("Apple Sign In Error");
    	});
	},
	mounted() {
		// 初始化apple登录
		this.initAppleLogin();
	},
	methods: {
		// 初始化 Apple ID 认证
	    initAppleLogin () {
	      if (AppleID?.auth) {
	        const nonce = Math.random().toString(36).substr(2, 10);
	        AppleID.auth.init({
	          clientId: 'xxx', // 后台生成的
	          redirectURI: 'https://xxx', // 回调地址,必须要后台添加
	          scope: 'name email',
	          state: `${Math.round(Math.random() * 100000000)}`,
	          nonce: nonce,
	          usePopup: true, // 使用当前页面弹出小窗的模式
	        });
	      }
	    },
		iosLogin() {
			try {
		       AppleID.auth.signIn();
		    } catch ( error ) {
		       console.error('Apple Sign In Error: ', error);
		    }
		},
		// 调用登录接口-IOS
	    overseaIosLoginFun(val) {
	      const json = {
	        id_token: val.id_token,
	      };
	      overseaIosLogin(json).then(res => {
	        if(res.Code != 0) {
	          return;
	        }
	        localStorage.setItem("token", res.data.account.token);
	        Toast.success(this.$t('message.loginToast1'));
	      });
	    },
	}
}

二、google登录

使用你的谷歌账号登录

使用步骤

1.入口文件index.html引入js文件

代码如下(示例):

<script src="https://accounts.google.com/gsi/client" async defer></script>

2.vue页面初始化支付按钮,并且点击按钮登录

<div id="my-google-id"></div>
import {
  overseaGoogleLogin,
} from "../api/api";
export default {
	data() {
	    return {
	    	
		}
	},
  	created() {},
  	mounted() {
	  	setTimeout(() => {
	        this.renderButton();
	    }, 3000);
  	},
  	methods: {
  		// 初始化谷歌按钮,建议每次打开页面都再次初始化
	  	renderButton() {
	      const that = this;
	      const nonce = Math.random().toString(36).substr(2, 10);
	      google.accounts.id.initialize({
	        client_id: 'xxx',
	        ux_mode: 'popup', // redirect,popup
	        callback: (response) => {
	          that.overseaGoogleLoginFun(response);
	        },
	        auto_prompt: false, // 自动登录
	        nonce: nonce,
	      })
	      const parent = document.getElementById('my-google-id');
       	  google.accounts.id.renderButton(parent, {
          	type: "icon",
          	width: 130,
          });
	    },
	    // 调用登录接口- 谷歌
	    overseaGoogleLoginFun(val) {
	    	const json = {
		        third_user_token: val.credential,
      		};
      		overseaGoogleLogin(json).then(res => {
		        if(res.Code != 0) {
		          return;
		        }
		        localStorage.setItem("token", res.data.account.token);
		        Toast.success(this.$t('message.loginToast1'));
		      });
	    },
  	}
}

三、facebook登录

使用你的facebook账号登录

使用步骤

1.入口文件index.html引入js文件

代码如下(示例):

<script crossorigin="anonymous" src="https://connect.facebook.net/zh_CN/sdk.js#xfbml=1&version=v3.3&appId=xxxxx&autoLogAppEvents=1" async defer></script>

2.vue页面初始化支付按钮,并且点击按钮登录

<fb-signin-button
id="my-facebook-id"
:params="fbSignInParams"
@success="onSignInSuccess"
@error="onSignInError">
Sign in with Facebook
</fb-signin-button>
import {
  overseaFacebookLogin,
} from "../api/api";
export default {
	data() {
	    return {
		  fbSignInParams: {
	        scope: 'email, public_profile',
	        return_scopes: true
	      },
	    }
	},
	created() {
	},
	mounted() {},
	methods: {
		onSignInSuccess(response) {
	      this.overseaFacebookLoginFun(response);
	   	},
	   	onSignInError (error) {
	      // alert("faceBook error")
	    },
	    // 调用登录接口-facebook
	    overseaFacebookLoginFun(val) {
	      const json = {
	        auth_api_ver: 1,
	        code: val.authResponse.accessToken
	      }
	      overseaFacebookLogin(json).then(res => {
	        if(res.Code != 0) {
	          return;
	        }
	        localStorage.setItem("token", res.data.account.token);
	        Toast.success(this.$t('message.loginToast1'));
	      });
	    },
	}
}


页面效果

在这里插入图片描述

注意事项

1. 如果遇到登录结果无法监听的情况,需要根据报错配置页面的响应头(找运维老师).

我配置的响应头有:

响应头如下(示例):
cross-origin-opener-policy: *

2.google按钮的大小需要用css修改下,让谷歌登录的按钮和设计图的大小一样.点击设计图的按钮时,能正常触发登录.不知道为什么我在js中根据谷歌提供的参数无法修改按钮的样式,所以用了这种方式.

#my-google-id {
    width: 100%;
    height: 100%;
    position: absolute;
    top: 0;
    left: 0;
    right: 0;
    bottom: 0;
    z-index: 1;
    opacity: 0;
    >div {
      >div {
        >div {
          width: 130px !important;
          height: 130px !important;
        }
      }
    }
    iframe {
      margin: 0 !important;
      position: relative !important;
      transform: scaleX(2) scaleY(2.9); // 这是主要的代码
      top: 43px !important;
      left: 32px !important;
      z-index: 2;
      cursor: pointer;
    }
  }

网站公告

今日签到

点亮在社区的每一天
去签到