一、准备工作
1、开通facebook账号,设置后台参数和测试都用得到
注册facebook账号:https://www.facebook.com/
2、进入开发者后台,如果没有项目的话先创建相关的项目
https://developers.facebook.com/apps/1259504534946221/add/
开通公司验证
3、申请相关的权限,包括Email、公开资料信息等,否则可能会报错
二、登录实现方式
1、使用facebook的一键登录,文档
2、faccebook登录SDKhttps://developers.facebook.com/docs/javascript
贴相关实现代码(Vue中实现)
<template><div><imgsrc="@/static/images/home/facebook.svg"alt=""class="amall-imgChild"@click="login"/></div>
</template>mounted() {this.$$.getScript("https://connect.facebook.net/en_US/sdk.js#xfbml=1&version=v16.0&appId=6015526188528736&autoLogAppEvents=1", () => {console.log(window, this);console.log(FB);window.fbAsyncInit = () => {FB.init({appId: '具体的应用编号',status: true,oauth: true,cookie: true,xfbml: true,version: 'v16.0'});FB.getLoginStatus((response) => {console.log("status", response);}, {scope: 'public_profile,email,user_likes', return_scopes: true, auth_type: 'reauthenticate', auth_nonce: '{random-nonce}'});};});
},
methods: {login() {FB.getLoginStatus((statusResponse) => {if(statusResponse.status=="unknown"){FB.login((response) => {console.log("status", response);this.$nextTick(() => {this.onSignInSuccess(response);});}, {scope: 'public_profile,email,user_likes', return_scopes: true, auth_type: 'reauthenticate', auth_nonce: '{random-nonce}'});} else {this.$nextTick(() => {this.onSignInSuccess(statusResponse);});}}, {scope: 'public_profile,email,user_likes', return_scopes: true, auth_type: 'reauthenticate', auth_nonce: '{random-nonce}'}); },async testAPI(callbackRes) {console.log('Welcome! Fetching your information.... ', callbackRes);var token = callbackRes&&callbackRes.authResponse&&callbackRes.authResponse.accessToken || null;// var uid = callbackRes&&callbackRes.authResponse&&callbackRes.authResponse.userID || null;const params = {};if(token){params.access_token = token;}FB.api('/me?fields=email', 'get', params, (response) => {console.log('Successful login for: ' + response.name, response);if(!response.email){this.$prompt('', 'Email', {confirmButtonText: 'Confirm',cancelButtonText: 'Cancel',inputPattern: /[\w!#$%&'*+/=?^_`{|}~-]+(?:\.[\w!#$%&'*+/=?^_`{|}~-]+)*@(?:[\w](?:[\w-]*[\w])?\.)+[\w](?:[\w-]*[\w])?/,inputErrorMessage: 'Incorrect mailbox format',inputPlaceholder: 'Please enter your email to receive product information'}).then(({ value }) => {this.$message({type: 'success',message: '你的邮箱是: ' + value});this.$store.dispatch("user/loginFromOther", {email: value,firstName: response.first_name || response.name || "",lastName: response.last_name || "",});}).catch(() => {FB.logout();});} else {this.$store.dispatch("user/loginFromOther", {email: response.email,firstName: response.first_name || response.name || "",lastName: response.last_name || "",});}});FB.api('/me/permissions', 'get', params, function(response) {console.log(response, "uid-permissions");});},onSignInSuccess(response) {console.log(response)switch (response.status) {case "connected":console.log('返回第三方FB的信息:授权成功,登录成功!');this.testAPI(response);break;case "not_authorized":console.log('返回第三方FB的信息:授权成功但是未关联该应用(用户第一次授权)');this.testAPI(response);break;case "unknown":console.log('返回第三方FB的信息:取消授权');this.$message.closeAll();this.$message.warning("Authorization exception, please try to log in using other methods");break;default: break;}},onSignInError(error) {console.log('返回第三方FB的error信息', error);},
},
3、使用后端返回的登录验证地址进行跳转
贴实现代码(vue实现)
//facebook.vue页面
<template><div><imgsrc="@/static/images/home/facebook.svg"alt=""class="amall-imgChild"@click="login"/></div>
</template><script>
export default {name: 'fbSignin',methods: {login() {this.$store.dispatch("user/openIframe", 'facebook');},},
}
</script>//store登录方法
const actions = {openIframe({state, commit}, key) {//具体的登录接口,用于返回第三方登录的验证页面url,key传的是facebook,根据自己的http请求进行配置$api(`oauth.${key}`).then((res) => {this.$bus.iframe && this.$bus.iframe.close();commit("SET_IFRAME", res);});},
}const mutations = {SET_IFRAME(state, iframeUrl){let params = `scrollbars=no,resizable=no,status=no,location=no,toolbar=no,menubar=no,width=800,height=500,left=10%,top=20%`;//打开小窗口this.$bus.iframe = open(iframeUrl, '_blank', params);window.addEventListener("message", (event) => {const res = event.data;//小窗口的登录信息,包含tokenif(res.code == '000000'){//拿到相应的登录token去登录,如果失败给出提示this.dispatch("user/getUserInfo", res.token).then(() => {this.$router.replace("/");});} else {//小提示:facebook注册可以使用手机号注册,因此不一定存在邮箱,需要邮箱必填的需要再次做个判断this.$message.closeAll();this.$message.error(res.message || "login fail~");}});}
};
三、踩坑报错记录
1、关于第一次拉起登录成功,前端再次拉起登录的的报错问题
一方面是因为权限问题,请求的权限没有申请开通,另一方面就是项目没有开启上线功能。
相关文章
Google Play 账号关联问题解决
最近真的忙,需求做不完,代码要重构,很多策略要沟通,会议也慢慢多了起来,但仍然不能停止输出有价值的文章!
被问到最多的问题也是最让大家头疼的问题是被关联,很多新手经常觉得莫名其妙的应用就…
关于eBay多账号防关联你不得不知道的事
最近很多人向龙哥反映,说这个亚马逊平台封号越来越严重了,来问龙哥咋办。我这边的建议就是最好多运营几个平台,分散这个封号风险。像是eBay这个平台,在美国也是很受欢迎的。今天的话就会着重讲讲eBay要怎么多账号防关联࿰…
同一账户在不同地方登录问题
同一个账户在在不同地方登录,别的地方提示下线了。 概述
其实就是以用户最后一次登录的为准。其他登录的地方全部提示:你已经下线,是否重新登录。从而保护你的操作信息是安全的。
实现原理
随机产生一个uuid,然后设置一个键key…
下单账号与支付账号不一致_【支付宝】如何申请支付账号
简单说明:1.支付宝支付功能开通相对较快,一般1天就可以通过了 2.以下的网址是方便您直接跳转到对应页面的,点击网址后先登录哦 添加关联账户(为了财务分离)(如果已经有一个想要做APP支付的支付宝账户,请用原有的公司的账户登陆后访问以下网址) https://uemprod.alipay.…
亚马逊店铺同站点关联了应该怎么操作方法?
亚马逊店铺同站点关联了应该怎么操作方法? 一般陌生关联都会收到这样的邮件: 尊敬的 ***: 您好! 我们发现您与以 L***** 开头的账户有关。 我们收到了您提交的信息,但目前这些信息不足以重新激活您的账户。要重新激活您…
亚马逊店铺品牌关联怎么办有什么好的解决方法?
亚马逊店铺品牌关联怎么办有什么好的解决方法? 关于亚马逊店铺不懂得问题都可以联系我..... 诉信的内容一定要强调你只有一个卖家账号,没有其他的亚马逊卖家账号,并且账号的行为表现良好,并没有违规的几率,而且还是优质…
亚马逊卖家问题-01.注册了品牌,但是仍然无法使用Vine和品牌旗舰店功能
这个问题困扰了我5天,开了3个case,其实很好解决,根本不用开case,下面直接上干货:
直接进入卖家后台的Vine菜单里面 其实已经通过了品牌注册,但是这个功能仍然不能使用
这时候需要点击最下方的"了解有关Amazon Vine计划的更多信息" 点开之后,会看到官方对于Vine的…
亚马逊自营店铺被跟卖,我们该如何保护我方的listing?
亚马逊自营店铺是让无数卖家又爱又恨的存在。近日就有一位亚马逊欧洲站卖家发现自己已上线半年的产品莫名其妙被亚马逊其他站点的自营店铺跟卖了,更加荒唐的是跟卖产品的ASIN和listing都与这位卖家的店铺一模一样,属实让这位卖家冒出许多的问号。
虽然…