0

エンドポイントv2(昨日v1から移行)を使用してWebアプリケーションにfirebase認証を追加する方法については、thisのチュートリアルに従っています。JavaScriptからAPIを呼び出すフロントエンド:401の不正使用angerfire

以前はGoogleアカウント認証のみでしたが、追加するためにfirebaseに切り替える必要があります。フェイスブック。

JavaScript Frontend(angularJS & anglefireで作成)からAPIを呼び出すと、401が不正になります。

は、私は論理的なステップをしないのです、感じる:

  1. 私はログインすることができ、クライアント側(ポップアップが開き、私のFacebookの名が表示されます)に。

  2. ステップがありませんか?

  3. endpoints.get_current_user()はユーザーを取得しません。

どこが間違っていますか?

これは私がバックエンドからプロファイルを取得したいページを初期化したいものです。

`/** 
     * Initialize profile page. 
     * Update the profile if the user's profile has been stored. 
     */ 
     $scope.init = function() { 
      var retrieveProfileCallback = function() { 
       $scope.profile = {}; 
       $scope.loading = true; 
       gapi.client.myapi.getProfile().execute(function (resp) { 
         $scope.$apply(function() { 
          $scope.loading = false; 
          if (resp.error) { 
           // Failed to get a user profile. 
          } else { 
           // Succeeded to get the user profile. 
           $scope.profile.displayName = resp.result.displayName; 
           $scope.profile.someOtherProperty = resp.result.someOtherProperty; 
           $scope.initialProfile = resp.result; 
          } 
         }); 
        } 
       ); 
      }; 
      if (!firebaseUser) { 
       //TODO 
      } else { 
       retrieveProfileCallback(); 
      } 
     };` 

これはultimativelyはGetProfile(から呼び出されるメソッドの開始である) - エンドポイント:

ここで
def _getProfileFromUser(self): 
    """Return user Profile from datastore, creating new one if non-existent.""" 
    ## Make sure user is authed 
    user = endpoints.get_current_user() 
    if not user: 
     raise endpoints.UnauthorizedException('Authorization required') 

私のAPIデコレータは(openapi.jsonが展開されている)である。

# - - - - firebase - - - - - - - - - - - - - - - - - - 

firebase_issuer = endpoints.Issuer(
    issuer='https://securetoken.google.com/appname-123456', 
    jwks_uri='https://www.googleapis.com/service_accounts/v1/metadata/x509/[email protected]') 

# - - - - Endpoints API - - - - - - - - - - - - - - - - - - - 

@endpoints.api(name='myapi', 
       version='v1', 

       scopes=[EMAIL_SCOPE], 
       issuers={'firebase': firebase_issuer}) 
class MyApi(remote.Service): 

チュートリアルを大量に誤解しているような気がします。それは簡単すぎると思われ、うまくいかない。 など。 Googleは私がindex.htmlの中にそうようなのOAuth2 APIを初期化し、認可アカウント用:

`<script> 
     function init() { 
      gapi.client.load('myapi', 'v1', null, '//' + window.location.host + '/_ah/api'); 
      gapi.client.load('oauth2', 'v2', function() { 
       angular.bootstrap(document, ['conferenceApp']); 
      }); 
     }; 
    </script>` 

を私はfirebaseにswitichingいます考え出したので、私はそれを取り出しました。 このように:

`<script> 
     /** 
     * Initializes the Google API JavaScript client. Bootstrap the angular module after loading the Google libraries 
     * so that Google JavaScript library ready in the angular modules. 
     */ 
     function init() { 
      gapi.client.load('myapi', 'v1', null, '//' + window.location.host + '/_ah/api', function() { 
       angular.bootstrap(document, ['myApp']); 
      }); 
     }; 
    </script>` 

答えて

0

openapiの設定は正常です。この問題は、サインインフローを処理してFirebase認証トークンを取得するクライアントコードで発生します。 Google JS SDKではなくFirebase Web SDKを使用する必要があります。指示はhttps://firebase.google.com/docs/auth/web/google-signinをご覧ください。

関連する問題