こんにちは、Firebase は初めてですが、とても気に入っています。
私はこれを読みました: https://www.firebase.com/docs/security/custom-login.htmlそして、JWT を正常に作成し、Firebase アカウントに対して認証することができます。わーい!
ただし、これが将来の Firebase へのその後の呼び出しに何を意味するのかはわかりません。Firebase への今後のすべてのリクエストで、このトークンを渡す必要がありますか?
こんにちは、Firebase は初めてですが、とても気に入っています。
私はこれを読みました: https://www.firebase.com/docs/security/custom-login.htmlそして、JWT を正常に作成し、Firebase アカウントに対して認証することができます。わーい!
ただし、これが将来の Firebase へのその後の呼び出しに何を意味するのかはわかりません。Firebase への今後のすべてのリクエストで、このトークンを渡す必要がありますか?
同じページ内での Firebase への今後の呼び出しでは、同じ認証が使用されます。ドキュメントから:
任意の参照で認証を行うと、そのクライアントが Firebase 全体に対して認証されます。インターネット接続が失われた場合、Firebase は再び認証をシームレスに処理するため、アプリで操作を 1 回実行するだけで済みます。クライアントの資格情報を変更するには (たとえば、ユーザーが別のアカウントにログインする場合)、新しいトークンで再認証するだけです。
var ref = new Firebase(URL);
ref.on('value', ...) // not authenticated
ref.auth(TOKEN, function(error) {
if( !error ) {
ref.on('value', ...); //authenticated
ref.child('...').on('value', ...); //also authenticated
new Firebase(URL); // also authenticated if I'm using the same URL
}
});
ref.on('value', ...); // probably not authenticated (async call to auth probably not completed)
このトークンをページのリロード後も存続させたい場合は、クライアントが新しいページで firebaseRef.auth(...) を呼び出せるように、何らかの方法でトークンを保存する必要があります。
var ref = new Firebase(URL);
// fetch a token stored in localStorage on a previous page load
var token = localStorage.getItem('token');
if( !token || !tokenHasTimeLeft(token) ) {
token = fetchTokenFromServer(); /* some API call to your custom auth server */-
}
login(token);
function login(token) {
ref.auth(token, function(error) {
/** handle errors */
localStorage.setItem('token', token); // store for future page loads
});
}
// this method uses Base64.decode by Fred Palmer
// https://code.google.com/p/javascriptbase64/
// it checks to see if the token stored has more
// than 12 hours left before it expires
function tokenHasTimeLeft(tok) {
try {
var body = JSON.parse(Base64.decode(tok.split('.')[1]));
var exp = body.exp? moment.unix(body.exp) : moment.unix(body.iat).add('hours', 24);
DEVMODE && console.log('parsed token', body);
return exp.diff(moment(), 'hours') > 12;
}
catch(e) {
console.warn(e);
return false;
}
}