Google Authentication in Angular 6

别说谁变了你拦得住时间么 提交于 2019-12-10 09:43:08

问题


I have created a project in angular 6 which exhibits google authentication using angular-6-social-login. Following is the install command:

npm install --save angular-6-social-login

After this, i made the following changes to the app.module.ts file:

import {SocialLoginModule,AuthServiceConfig,GoogleLoginProvider} from "angular-6-social-login";


// Configs 
export function getAuthServiceConfigs() {
  let config = new AuthServiceConfig(
  [
    {
      id: GoogleLoginProvider.PROVIDER_ID,
      provider: new GoogleLoginProvider("Your-Google-Client-Id")
    }
  ];
 );
 return config;
}

@NgModule({
  imports: [
   ...
  SocialLoginModule
 ],
 providers: [
   ...
  {
  provide: AuthServiceConfig,
  useFactory: getAuthServiceConfigs
  }
 ],
 bootstrap: [...]
})


export class AppModule { }

And the following changes in app.component.ts:

import {Component, OnInit} from '@angular/core';
import {
 AuthService,
 GoogleLoginProvider
} from 'angular-6-social-login';

@Component({
  selector: 'app-signin',
  templateUrl: './signin.component.html',
  styleUrls: ['./signin.component.css']
})


export class SigninComponent implements OnInit {

constructor( private socialAuthService: AuthService ) {}

public socialSignIn(socialPlatform : string) {
  let socialPlatformProvider;
  if(socialPlatform == "facebook"){
      socialPlatformProvider = FacebookLoginProvider.PROVIDER_ID;
   }else if(socialPlatform == "google"){
     socialPlatformProvider = GoogleLoginProvider.PROVIDER_ID;
   }else if (socialPlatform == "linkedin") {
     socialPlatformProvider = LinkedinLoginProvider.PROVIDER_ID;
   }

this.socialAuthService.signIn(socialPlatformProvider).then(
  (userData) => {
    console.log(socialPlatform+" sign in data : " , userData);
    // Now sign-in with userData
    // ...

     }
   );
 }

 }

Following is my app.component.html

<button (click)="socialSignIn('google')">Sign in with Google</button> 

I started the application and it runs fine. Although i get the following error in the console:

Error that the console displays when i start the application. Basically when i run ng serve --open and open the console window of the application

The application runs fine, that is on click of the button, a google login screen pops up, asking me for my google credentials. I enter them and its authenticates.

I have 3 issues or rather doubts: 1) Why is that error appearing?

ERROR Error: Uncaught (in promise): TypeError: Cannot read property 'signIn' 
of undefined
TypeError: Cannot read property 'signIn' of undefined
at angular-6-social-login.umd.js:250
at new ZoneAwarePromise (zone.js:891)
at GoogleLoginProvider.push../node_modules/angular-6-social-login/angular-6- 
social-login.umd.js.GoogleLoginProvider.signIn (angular-6-social- 
login.umd.js:249)

2) We have exported function getAuthServiceConfigs() and later declared it in the Providers array in app.module.ts. Whats the use of that?

3) I need to render the google login screen on start of the application i.e. without clicking on the button. How do i achieve that?

I tried calling the method in ngOnInit():

ngOnInit(){
    this.socialSignIn('google');
}

but the screen appears blank

Please help me with this!


回答1:


The problem here is this

ngOnInit(){
 this.socialSignIn('google');
}

The injected socialAuthService of SigninComponent is not available on ngOnInit(). You can see more in Difference between Constructor and ngOnInit

Since I see a button on app.component.html. If you are trying to simulate a mouse click I would suggest using the appropriate Lifecycle Hooks

Also, delete FacebookLoginProvider and LinkedInLoginProvider in app.component.ts since there are no imports and no mention in app.module.ts




回答2:


If the code you have posted for app.module.ts is literally what you are trying to run, please note that the constructor for GoogleLoginProvider() within getAuthServiceConfigs() {...new GoogleLoginProvider("Your-Google-Client-Id")...} is expecting you to populate it with your Google Client ID.

More specifically, please note that the client ID will look something like YOUR_CLIENT_ID.apps.googleusercontent.com where YOUR_CLIENT_ID will be a long list of digits and numbers given to you by the Google API console. This whole string YOUR_CLIENT_ID.apps.googleusercontent.com must be given to the GoogleLoginProvider() constructor.... again, with YOUR_CLIENT_ID replaced with your web site client ID from the Google API console.

If you need to obtain a client ID from Google, you can follow the following link and click the blue CONFIGURE A PROJECT button: https://developers.google.com/identity/sign-in/web/sign-in

I hope that helps. Best wishes.



来源:https://stackoverflow.com/questions/50820188/google-authentication-in-angular-6

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!