diff --git a/README.MD b/README.MD index e9dc094..9d1fd9d 100755 --- a/README.MD +++ b/README.MD @@ -118,9 +118,41 @@ export class SigninComponent implements OnInit { } ``` +In `the profile component,the page After login you give your user the access profile.component.ts`, +```javascript +public unlinkaccount(socialPlatform : string) { + let socialPlatformProvider; + if(socialPlatform === "facebook"){ + socialPlatformProvider = FacebookLoginProvider.PROVIDER_ID; + socialPlatformProvider = GoogleLoginProvider.PROVIDER_ID; + this.socialAuthService.revokeAccess(this.userid).then( + (revokeres) => { + console.log(revokeres); + //the url to redirect after revocation + this.router.navigate(['/login',{unlinkmessage:'You have successfully unlinked your account'}]); + } + ); + }else if(socialPlatform === "google"){ + socialPlatformProvider = GoogleLoginProvider.PROVIDER_ID; + this.socialAuthService.revokeAccess(this.userid).then( + (revokeres) => { + console.log(revokeres); + //the url to redirect after revocation + this.router.navigate(['/login',{unlinkmessage:revokeres}]); + } + ); + } + } +``` +In `profile.component.html` +```html +

+Unlink {{provider}} Account +

- - + + +``` In `signin.component.html`, ```html diff --git a/src/auth.service.ts b/src/auth.service.ts index 0b9ed80..1adca23 100755 --- a/src/auth.service.ts +++ b/src/auth.service.ts @@ -82,5 +82,23 @@ export class AuthService { } }); } - + revokeAccess(userid:string): Promise { + var _this = this; + return new Promise(function (resolve, reject) { + if (_this._user && _this._user.provider) { + let /** @type {?} */ providerId = _this._user.provider; + let /** @type {?} */ providerObject = _this.providers.get(providerId); + providerObject.revokeAccess(userid).then(function (revokeres) { + _this._user = null; + _this._authState.next(null); + resolve(revokeres); + }).catch(function (err) { + _this._authState.next(null); + }); + } + else { + reject(AuthService.LOGIN_PROVIDER_NOT_FOUND); + } + }); + } } diff --git a/src/entities/base-login-provider.ts b/src/entities/base-login-provider.ts index 1b18bae..1bfb0a4 100755 --- a/src/entities/base-login-provider.ts +++ b/src/entities/base-login-provider.ts @@ -7,7 +7,7 @@ export abstract class BaseLoginProvider implements LoginProvider { abstract initialize(): Promise; abstract signIn(): Promise; abstract signOut(): Promise; - + abstract revokeAccess(userid:string):Promise; loadScript(obj: LoginProviderClass, onload: any): void { if (document.getElementById(obj.name)) { return; } let signInJS = document.createElement('script'); diff --git a/src/entities/login-provider.ts b/src/entities/login-provider.ts index ae0fb38..f84fd54 100755 --- a/src/entities/login-provider.ts +++ b/src/entities/login-provider.ts @@ -4,5 +4,6 @@ export interface LoginProvider { initialize(): Promise; signIn(): Promise; signOut(): Promise; + revokeAccess(userid:string):Promise; } diff --git a/src/providers/facebook-login-provider.ts b/src/providers/facebook-login-provider.ts index e5271fd..d7a8e57 100755 --- a/src/providers/facebook-login-provider.ts +++ b/src/providers/facebook-login-provider.ts @@ -69,5 +69,11 @@ export class FacebookLoginProvider extends BaseLoginProvider { }); }); } - + revokeAccess(userid:string): Promise{ + return new Promise(function (resolve, reject) { + FB.api(`/${userid}/permissions`,'DELETE',{},function (response) { + resolve('Account Unlink success'); + }); + }); + } } diff --git a/src/providers/google-login-provider.ts b/src/providers/google-login-provider.ts index 366ae6a..c5a9060 100755 --- a/src/providers/google-login-provider.ts +++ b/src/providers/google-login-provider.ts @@ -68,5 +68,18 @@ export class GoogleLoginProvider extends BaseLoginProvider { }); }); } + revokeAccess(userid:string): Promise{ + var _this = this; + return new Promise(function (resolve, reject) { + _this.auth2.disconnect().then(function (err) { + if (err) { + reject(err); + } + else { + resolve('Google account Unlink success'); + } + }); + }); + } }