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だけです。
簡単にユーザーを識別するために、電子メールアドレスを持つことが非常に良くなります。
多分、誰かが助けてくれるでしょう。ありがとう!
更新:
$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は電子メールアドレスを持たないユーザーを作成します。
私は:(
はこちらをご覧ください:https://firebase.google.com/docs/をauth/web/custom-auth。私はFirebaseの公式ガイドに従っています。あなたが見るとわかるように、ユーザーは作成されていますが、電子メールやプロバイダはなく、UIDを持っています。 – vitaminasweb
はい、わかります。メールを更新するには、以下を変更して追加します(カスタムトークンとともにクライアントに送り返す必要があります):firebase.auth()。signInWithCustomToken(token)。その後、(function(user){return user.updateEmail(email);})。catch(...) – bojeil
ありがとう!それはうまくいった!正しいと確認するために回答を更新してください。ちなみに、これはカスタム認証システムで行う正しい方法ですか、それともサーバーサイドライブラリを使用し、Firebase Admin SDKを使用してサーバーからユーザーを作成する方が良いですか?私の場合はPHPを使用して、今までこれまでのlibを見つけられませんでした。 – vitaminasweb