File

src/providers/facebook-login-provider.ts

Extends

BaseLoginProvider

Index

Properties
Methods

Constructor

constructor(clientId: string)
Parameters :
Name Type Optional
clientId string no

Properties

Public isInitialize
isInitialize: boolean
Type : boolean
Public loginProviderObj
loginProviderObj: LoginProviderClass
Type : LoginProviderClass
Default value : new LoginProviderClass()
Static Readonly PROVIDER_ID
PROVIDER_ID: string
Type : string
Default value : 'FACEBOOK'
isInitialize
isInitialize: boolean
Type : boolean
Inherited from BaseLoginProvider
Defined in BaseLoginProvider:6

Methods

Static drawUser
drawUser(response: any)
Parameters :
Name Type Optional
response any no
Returns : SocialUser
initialize
initialize()
signIn
signIn()
signOut
signOut()
Returns : Promise<any>
initialize
initialize()
Inherited from BaseLoginProvider
Defined in BaseLoginProvider:7
loadScript
loadScript(obj: LoginProviderClass, onload: any)
Inherited from BaseLoginProvider
Defined in BaseLoginProvider:11
Parameters :
Name Type Optional
obj LoginProviderClass no
onload any no
Returns : void
signIn
signIn()
Inherited from BaseLoginProvider
Defined in BaseLoginProvider:8
signOut
signOut()
Inherited from BaseLoginProvider
Defined in BaseLoginProvider:9
Returns : Promise<any>
import { BaseLoginProvider } from '../entities/base-login-provider';
import { SocialUser, LoginProviderClass } from '../entities/user';

declare let FB: any;

export class FacebookLoginProvider extends BaseLoginProvider {
  public isInitialize: boolean;
  public static readonly PROVIDER_ID = 'FACEBOOK';
  public loginProviderObj: LoginProviderClass = new LoginProviderClass();

  constructor(private clientId: string) {
    super();
    this.loginProviderObj.id = clientId;
    this.loginProviderObj.name = 'FACEBOOK';
    this.loginProviderObj.url = 'https://connect.facebook.net/en_US/sdk.js';
  }

  initialize(): Promise<SocialUser> {
    return new Promise((resolve, reject) => {
      this.loadScript(this.loginProviderObj, () => {
          FB.init({
            appId: this.clientId,
            autoLogAppEvents: true,
            cookie: true,
            xfbml: true,
            version: 'v2.9'
          });
          this.isInitialize = true;
          FB.AppEvents.logPageView();

          FB.getLoginStatus(function (response: any) {
            if (response.status === 'connected') {
              const accessToken = FB.getAuthResponse()['accessToken'];
              FB.api('/me?fields=name,email,picture', (res: any) => {
                resolve(FacebookLoginProvider.drawUser(Object.assign({}, {token: accessToken}, res)));
              });
            }
          });
        });
    });
  }

  static drawUser(response: any): SocialUser {
    let user: SocialUser = new SocialUser();
    user.id = response.id;
    user.name = response.name;
    user.email = response.email;
    user.token = response.token;
    user.photoUrl = 'https://graph.facebook.com/' + response.id + '/picture?type=normal';
    return user;
  }

  signIn(): Promise<SocialUser> {
    return new Promise((resolve, reject) => {
      FB.login((response: any) => {
        if (response.authResponse) {
          const accessToken = FB.getAuthResponse()['accessToken'];
          FB.api('/me?fields=name,email,picture', (res: any) => {
            resolve(FacebookLoginProvider.drawUser(Object.assign({}, {token: accessToken}, res)));
          });
        }
      }, { scope: 'email,public_profile' });
    });
  }

  signOut(): Promise<any> {
    return new Promise((resolve, reject) => {
      FB.logout((response: any) => {
        resolve();
      });
    });
  }

}

results matching ""

    No results matching ""