2016-08-29 6 views
2

Firebaseを使用している私のWebアプリケーションのための "remember me"関数を作成しようとしています。firebase.auth()。ウェブアプリケーションでcreateCustomTokenが定義されていません

私の目標は、ユーザーが「私を覚えている」をクリックして正常にログインすると、認証トークンがlocalStorageを使用して保存され、次回の訪問時に自動的にログインすることです。セキュリティ目的)。

しかし、私はfirebase.auth().createCustomTokenに電話しようとしたときに、それが存在しないというエラーが出ました。これは間違ったアプローチか、firebaseの間違った関数呼び出しですか?ありがとう!ここで

は、私のコードのサンプルです:その後、

var customToken = firebase.auth().createCustomToken(user.uid); 
localStorage.setItem("savedToken", customToken); 

後、私は戻ってサインインするために、このラインを使用する計画:

firebase.auth().signInWithCustomToken(localStorage.getItem("savedToken")).then(function() { 
+2

コードを表示してください。あなたが試したことが分かると、デバッグするのがはるかに簡単です。 – Soviut

答えて

5

firebase.auth().createCustomTokenサーバーAPIでのみ使用可能です。

はメール&パスワードで認証とセッションのためのトークンを取得するには、これを試してください:

firebase.auth().signInWithEmailAndPassword(email, password) 
    .then(function(user) { 
    user.getToken().then(function(token) { 
     localStorage.setItem("savedToken", token); // store the token 
    }); 
    }) 
    .catch(function(error) { 
    // handle error... 
    }); 

これは、あまりにも、他の認証方法で動作します。ちょうどUser.getTokenを使用してください。

var token = localStorage.getItem("savedToken"); // get stored token 
firebase.auth().signInWithCustomToken(token).catch(function(error) { 
    // handle error... 
}); 

を上記のコードは動作しません、signInWithCustomTokenので:あなたは(まだクライアント上)トークンを持って、そしてあなたがそれを使用して認証したい、場合はその後、ちょうどあなたが現在行っている何をすべきかサーバーによって発行されたトークンがcreateCustomTokenでのみ動作します。電子メール/パスワードトークンで認証する方法がわかりません。

+0

ありがとうございます。実際は古い文書ですが、残念ながらこのコードはFirebase 3.0以上(これは私が使用しているものです)で動作します。 –

+0

ああ、申し訳ありません。これはあなたがしたいことですか? – qxz

+1

@LiorHirschfeld Firebase 3.x用に編集されました – qxz

1

カスタムトークンを作成するには、Firebaseプロジェクトの秘密鍵/サービスアカウントにアクセスする必要があります。このキーは、Firebaseプロジェクトに無制限にアクセスできることを知っているFirebaseプロジェクトにアクセスするためのマスターキーです。

秘密鍵を知っている人は、Firebaseプロジェクトに無制限にアクセスできるので、までミントのカスタムトークンをクライアント上で使用することは意味がありません。 Firebaseのデータベースとストレージサービスからすべてのセキュリティを削除するだけで済みます。

カスタムトークンmint a custom token on an app serverを使用してクライアントを認証し、クライアントに(安全に)渡します。次にuse the custom on the clientsignInWithCustomToken。この方法では、アプリケーションサーバーだけがサービスアカウント/秘密キーを知っている必要があります。

+0

ありがとうございます。もともと私が目指していたgetToken()メソッドを使ってサインインすることを知っていますか?私の最終的な目標は、ユーザーがローカルにユーザー名とパスワードを保存しないで再度ログインできるようにすることです。これを行うより良い方法はありますか? –

+0

ユーザーの現在のトークンは、ユーザーがログインしたときに自動的に保存され、再訪時に復元されます。あなたは 'onAuthStateChanged'ハンドラが欠けているようです:https://firebase.google.com/docs/auth/web/manage-users#get_the_currently_signed-in_user –

+0

ありがとうございますが、私は" var user = firebase .auth()。currentUser "が読み込まれた後、ページが更新される前にログインしていたとしても、ユーザーはログインしていないという結果が常に得られました。現在のトークンが復元されていない理由を知っていますか? –

関連する問題