- 大家好 *
我正在使用Angular.js1.5、Google Authentication(gapi)和UI router创建一个Web应用程序。
我的主要目标是首先初始化GoogleUser,使用主抽象状态的resolve方法:
$stateProvider
.state('app', {
url:'/',
templateUrl: 'layout/app-view.html',
resolve: {
googleAuth: function (User:UserService) {
return User.initCurrent();
}
}
});
在这一点上,它工作得很好-它注入了UserService,并调用其initCurrent()方法,该方法返回一个promise,一旦当前用户初始化,该方法将是完整的。下面是UserService简洁代码:
class UserService implements UserInterface {
public current:GoogleUser;
private _GoogleAuth:GoogleAuthService;
private _AppConstants;
constructor(GoogleAuth:GoogleAuthService) {
'ngInject';
this._GoogleAuth = GoogleAuth;
}
initCurrent():ng.IPromise<GoogleUser> {
return this._GoogleAuth.getCurrentUser().then((current) => {
this.current = current;
return this.current;
})
}
}
反过来initCurrent()从getCurrentUser()接收一个promise,这个promise将在gapi加载和GoogleAuth示例初始化后实现。为此我创建了一个GoogleAuthService:
class GoogleAuthService implements GoogleAuthServiceInterface {
public googleAuth;
private _AppConstants;
private deferGoogleAuthInit:ng.IDeferred<any>;
constructor(AppConstants, $log, $q:ng.IQService) {
'ngInject';
this._AppConstants = AppConstants;
this.deferGoogleAuthInit = $q.defer();
gapi.load('auth2', () => {
gapi.auth2.init({
client_id: AppConstants.googleClientId,
cookiepolicy: 'single_host_origin'
}).then((googleAuth) => {
this.googleAuth = googleAuth;
this.deferGoogleAuthInit.resolve('GoogleAuth Initialized');
})
});
}
getCurrentUser() {
return this.deferGoogleAuthInit
.promise.then(() => {
return this.googleAuth.currentUser.get()
})
}
}
**问题:**当我不使用resolve方法初始化用户,并通过控制台做同样的事情:获取UserService示例、initCurrentUser等,一切正常:signIn/signOut,获取当前用户等。但当我在resolve方法中初始化当前用户时,尝试signOut会导致以下错误消息:
未捕获的类型错误:无法读取null的属性“postMessage”
但在同一时间,所有的服务注入正确,我收到了一个正确的用户示例,虽然我不能重新登录它.你会有什么建议?
1条答案
按热度按时间w1jd8yoj1#
我在react应用程序上遇到了类似的问题。我能够通过更改CORS策略来解决,如下所示:
救世主参考-
https://github.com/google/google-api-javascript-client/issues/796#issuecomment-1118136612
(从-Why Google-Auth(Google Identity) Blank popup in Django?中找到)