公司最近做的一个项目要求使用Facebook实现一键登录的功能。所谓的Facebook登录就是获取用户在Facebook的资料,通过这些资料(邮箱等)登录或者注册目标网站。这中间Facebook提供了相应的接口,通过这个接口获取用户授权就能拿到相应的用户资料。虽然整个过程完成下来还算比较顺利。这边还是要做一下记录。

在使用之前,需要先在Facebook开发者平台注册账号,新建应用,然后获取新建应用的编号APPID。相应的流程开发平台写的还是相对比较清楚的,这里就不一一赘述。其中要注意的是:有效 OAuth 跳转 URL要填写正确。

还有一个是隐私政策网站的填写。这个关乎应用能不能的公开发布。找到开发平台的控制面板下面有个设置->基本。在隐私权政策网址里可以填(这个不是唯一的,填写的地址有效即可)。然后保存更改。

然后就可以点击应用发布开关,弹窗提示点击确定即可。最后效果是这样的:

加载网页时应采取的第一步是检查用户是否已使用 Facebook 登录功能登录您的应用。调用FB.getLoginStatus即可开始此流程。此函数会触发 Facebook 调用,获取登录状态,并调用包含结果的回调函数。

下面是将在页面加载期间运行以检查用户登录状态的部分代码:

123
FB.getLoginStatus(function(response) {    statusChangeCallback(response);});

提供给回调的response对象包括的字段:

12345678910111213141516
{    // 用户登录状态    status: 'connected',        authResponse: {        // 包括应用用户的访问口令        accessToken: '...',        // 口令到期且需要更新的 UNIX 时间        expiresIn:'...',        // 登录过期和请求重新授权之前的时长(以秒为单位)        reauthorize_required_in:'...'        // 经签名的参数,其中包括应用用户的信息。        signedRequest:'...',        // 应用用户的编号        userID:'...'    }}

知道用户的登录状态后,应用就可以执行以下操作之一:

代码

12345678
<div id="fb-root"></div><script>(function(d, s, id) {  var js, fjs = d.getElementsByTagName(s)[0];  if (d.getElementById(id)) return;  js = d.createElement(s); js.id = id;  js.src = 'https://connect.facebook.net/zh_CN/sdk.js#xfbml=1&version=v3.2&appId=申请的应用编号&autoLogAppEvents=1';  fjs.parentNode.insertBefore(js, fjs);}(document, 'script', 'facebook-jssdk'));</script>

按钮

1
<div class="fb-login-button" data-size="large" data-button-type="continue_with" data-auto-logout-link="false" data-use-continue-as="false"></div>
123456789101112131415
<script>	function fb_login() {		FB.login(function(response) {			if (response.status === 'connected') {                // 获取用户id、Email、名称等				FB.api('/me?fields=id,email,first_name,last_name,gender', function(response) {         // 获取信息后的相关操作         console.log(response);				});			} else {				alert('login fail');			}		}, {scope: 'public_profile,email'});	}</script>
12345678910111213141516171819202122232425262728293031323334353637383940
<script>	window.fbAsyncInit = function() {		FB.init({			appId: '',  // 这里需要改成15位你创建的Facebook应用编号			cookie: true,			xfbml: true,			version: 'v3.2'		});		FB.AppEvents.logPageView();	};	(function(d, s, id) {		var js, fjs = d.getElementsByTagName(s)[0];		if (d.getElementById(id)) {			return;		}		js = d.createElement(s);		js.id = id;		js.src = "//connect.facebook.net/en_US/sdk.js";		fjs.parentNode.insertBefore(js, fjs);	}(document, 'script', 'facebook-jssdk'));</script><script>	function fb_login() {		FB.login(function(response) {			if (response.status === 'connected') {				FB.api('/me?fields=id,email,first_name,last_name,gender', function(response) {    // 获取信息后的相关操作				});			} else {				alert('login fail');			}		}, {scope: 'public_profile,email'});	}</script>	<div class="login-btn-box" >        <button  onclick="fb_login();">Login with Facebook</button>	</div></div>

Facebook JavaScript SDK在最新的3.2版本中跳转 URI 和 JavaScript SDK 强制使用 HTTPS。Facebook是使用标准的 OAuth 客户端口令流程。其授权过程跟其他OAuth没什么区别,按照官网的流程走一般都能成功。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。