2017-02-04 19 views
3

Ionicで作られたモバイルアプリケーションにFirebaseカスタム認証システムを使用しています。私はカスタムAuthバックエンドとしてLaravel 5.2を使用しています。signInWithCustomTokenで作成されたFirebase Auth - >ユーザーにメールアドレスがありません

新しいユーザーが登録されると、laravel(firebase/php-jwtを使用)でトークンを生成し、モバイルアプリに返します。私は、トークンを生成するために、以下のコードを使用してバックエンドで

firebase.auth().signInWithCustomToken($auth.getToken()) 
    .then(function(response) { 
     $log.debug(response); 
    }) 
    .catch(function(error) { 
     $log.debug(error.code + ' - ' + error.message); 
    }); 

:このレジスタプロセス中

アプリケーションは、トークンを受信し、次のコードを使用してfirebaseにユーザーを作成

private function create_custom_token($uid, $email, $is_premium_account) { 
    $service_account_email = env('SERVICE_ACCOUNT_EMAIL'); 
    $private_key = env('SERVICE_PRIVATE_KEY'); 

    $now_seconds = time(); 
    $payload = array(
     "iss" => $service_account_email, 
     "sub" => $service_account_email, 
     "aud" => "https://identitytoolkit.googleapis.com/google.identity.identitytoolkit.v1.IdentityToolkit", 
     "iat" => $now_seconds, 
     "exp" => $now_seconds+(60*60), // Maximum expiration time is one hour 
     "uid" => $uid, 
     "claims" => array(
      "premium_account" => $is_premium_account, 
      "email" => $email, 
     ) 
    ); 
    return JWT::encode($payload, $private_key, "RS256"); 
} 

下の画像からわかるように、ユーザーはfirebaseで生成されますが、問題はメールアドレスがなく、UIDだけです。

enter image description here

簡単にユーザーを識別するために、電子メールアドレスを持つことが非常に良くなります。

多分、誰かが助けてくれるでしょう。ありがとう!

更新:

$payload = array( "iss" => $service_account_email, "sub" => $service_account_email, "aud" => "https://identitytoolkit.googleapis.com/google.identity.identitytoolkit.v1.IdentityToolkit", "iat" => $now_seconds, "exp" => $now_seconds+(60*60), // Maximum expiration time is one hour "uid" => $uid, "email" => $email, "email_verified" => false, "claims" => array( "premium_account" => $is_premium_account, "email" => $email, "email_verified" => false, ) ); 

と私もそれを見るためにいくつかのテストがfirebaseに渡されたトークンは、すべての必要な含ま行わ:

私は少しにcreate_custom_token機能のための$ペイロードを変更しましたデータ。バックエンドとシームで同じライブラリ(firabase/php-jwt)を使ってコード化されたトークンをデコードしましたが、firebaseは電子メールアドレスを持たないユーザーを作成します。

enter image description here

私は:(

答えて

4

をしないのですかわからない私はそれがそうするようにカスタムトークンでは可能ではないと思います。

管理SDKが許すのNode.jsあなたは/ updateUserを作成し、そのユーザーのカスタムトークンを作成することができます。これは理想的な方法ですが、PHPを使用しているときは、次の解決策をお勧めします:

クライアントを使用して電子メールを設定する必要がありますside jsライブラリ:

  • カスタムトークンを作成した後、クライアントアプリケーションに電子メールを送信します。あなたはすでにとにかくそれを送信している、ちょうど一緒に電子メールを渡す。クライアントアプリケーションで
  • 、signInWIthCustomTokenとユーザーに次のように提供する電子メールでupdateEmailを返しました:

    firebase.auth().signInWithCustomToken(token) 
        .then(function(u‌​ser) { 
        return user.updateEmail(email); 
        }).catch(...) 
    
+0

はこちらをご覧ください:https://firebase.google.com/docs/をauth/web/custom-auth。私はFirebaseの公式ガイドに従っています。あなたが見るとわかるように、ユーザーは作成されていますが、電子メールやプロバイダはなく、UIDを持っています。 – vitaminasweb

+0

はい、わかります。メールを更新するには、以下を変更して追加します(カスタムトークンとともにクライアントに送り返す必要があります):firebase.auth()。signInWithCustomToken(token)。その後、(function(user){return user.updateEmail(email);})。catch(...) – bojeil

+0

ありがとう!それはうまくいった!正しいと確認するために回答を更新してください。ちなみに、これはカスタム認証システムで行う正しい方法ですか、それともサーバーサイドライブラリを使用し、Firebase Admin SDKを使用してサーバーからユーザーを作成する方が良いですか?私の場合はPHPを使用して、今までこれまでのlibを見つけられませんでした。 – vitaminasweb

関連する問題