📅  最后修改于: 2023-12-03 14:58:02.219000             🧑  作者: Mango
本文将介绍如何在 Angular 应用程序中使用 Facebook 登录功能。我们将使用 Facebook 的 JavaScript SDK 来实现这一点。
首先,您需要在 Facebook 开发者网站上创建一个应用程序。如果您尚未拥有 Facebook 开发者账户,则需要先创建一个。
在您的开发者账户中,转到 "我的应用程序" 页面,然后单击 "新增应用程序" 按钮。选择 "网站" 应用程序类型,输入您的应用程序名称和联系人邮箱。
在左侧菜单中,单击 "添加产品"。选择 "Facebook 登录"。然后,单击 "设置" 按钮,将 "有效重定向 URI" 添加为您的应用程序URI。
在应用程序设置页面上,您将看到您的应用程序 ID 和应用程序密钥。请记下这些值,稍后将需要使用它们。
使用 npm 安装 Facebook JavaScript SDK:
npm install --save @types/facebook-js-sdk
我们将创建一个名为 FacebookService
的服务来管理 Facebook SDK 的配置和状态。
import { Injectable } from '@angular/core';
declare var FB: any;
@Injectable({
providedIn: 'root'
})
export class FacebookService {
private fbInitialized: boolean = false;
constructor() {
if (!this.fbInitialized) {
this.fbInitialized = true;
this.initFacebookSdk();
}
}
private initFacebookSdk() {
// 初始化 Facebook SDK
FB.init({
appId : 'your-app-id',
cookie : true,
xfbml : true,
version : 'v11.0'
});
}
public login(): Promise<any> {
// 构建授权URL
const authUrl = this.getLoginUrl();
// 打开授权窗口
const authWindow = window.open(authUrl, '_blank', 'height=600,width=600');
return new Promise((resolve, reject) => {
const intervalId = setInterval(() => {
if (authWindow.closed) {
clearInterval(intervalId);
this.checkLoginStatus().then((response) => {
resolve(response);
}).catch((error) => {
reject(error);
});
}
}, 1000);
});
}
private getLoginUrl(): string {
const uri = encodeURI(window.location.href);
return `https://www.facebook.com/v11.0/dialog/oauth?client_id=your-app-id&redirect_uri=${uri}&scope=email`;
}
private checkLoginStatus(): Promise<any> {
return new Promise((resolve, reject) => {
FB.getLoginStatus((response) => {
if (response.status === 'connected') {
const accessToken = response.authResponse.accessToken;
this.getUserInfo(accessToken).then((userInfo) => {
resolve(userInfo);
}).catch((error) => {
reject(error);
});
} else {
reject(response.status);
}
});
});
}
private getUserInfo(accessToken: string): Promise<any> {
return new Promise((resolve, reject) => {
FB.api('/me?fields=id,name,email,picture', (userInfo) => {
if (userInfo.error) {
reject(userInfo.error);
} else {
userInfo.accessToken = accessToken;
resolve(userInfo);
}
});
});
}
}
FacebookService
现在我们可以在组件中使用我们的新服务了。以下是具有 "Facebook 登录" 按钮的示例组件:
import { Component } from '@angular/core';
import { FacebookService } from './facebook.service';
@Component({
selector: 'app-facebook-login',
template: `
<button class="btn btn-primary" (click)="loginWithFacebook()">使用 Facebook 登录</button>
`
})
export class FacebookLoginComponent {
constructor(private facebookService: FacebookService) {}
loginWithFacebook() {
this.facebookService.login().then((response) => {
console.log(response);
}).catch((error) => {
console.error(error);
});
}
}
在这个组件类中,我们只需要注入 FacebookService
并在按钮的点击事件中调用 FacebookService.login()
。
现在您已经了解了如何使用 Facebook JavaScript SDK 在 Angular 应用程序中实现 Facebook 登录功能。虽然这只是一个简单的示例,但您可以使用此代码为您的特定应用程序定制解决方案。