watch()
1 つのことは、を呼び出す前にコールバックを設定するために呼び出していることを確認することですrequest()
。
たとえば、ページに次のようなものがあります。
<script src="https://login.persona.org/include.js"></script>
<script>
window.addEventListener("DOMContentLoaded", function() {
navigator.id.watch({
// Provide a hint to Persona: who do you think is logged in?
loggedInUser: null,
// Called when persona provides you an identity assertion
// after a successful request(). You *must* post the assertion
// to your server for verification. Never verify assertions
// in client code. See Step 3 in this document:
// https://developer.mozilla.org/en/Persona/Quick_Setup
onlogin: function(assertion) {
// do something with assertion ...
// Note that Persona will also call this function automatically
// if a previously-signed-in user visits your page again.
},
onlogout: function() {
// handle logout ...
},
onready: function() {
// Your signal that Persona's state- and callback-management
// business is complete. Enable signin buttons etc.
}
});
// Set up click handlers for your buttons
document.getElementById("signin").addEventListener(
'click', function() {
navigator.id.request({
// optional callback to request so you can respond to
// a user canceling the sign-in flow
oncancel: function() { /* do something */ }
});
}
});
});
</script>
これを実際に示した例を次に示します。
https://people.mozilla.org/~jparsons/persona_example.html
app://{uuid}
ただし、FirefoxOS では、インストールされたアプリ (パッケージ化または認定されたものではなく、一般的にインストールされたアプリ) には、デバイスごとに異なる uuid を持つ一意のフォームのオリジンが与えられることに注意してください。残念ながら、サインインを要求しているアプリが敵か味方かをサーバーが知る方法がないため、これはサインインの目的には役に立ちません。この問題を回避するには、サーバーでホストされている非表示の iframe でペルソナ コードを実行します。したがって、iframe には正しいオリジンがあり、サーバーはそれがアプリであることを認識します。iframe とアプリは、postMessage を介して通信できます。
パッケージ化されたアプリ (特権アプリと呼ばれることもあります) の場合、オリジンは webapp マニフェストで宣言されたオリジンになります。例: app://yourapp.yoursite.org
. これにより、アプリが本当にあなたのものであることをより確実にすることができますが、本当に妄想的な人は、iframe トリックを展開したいと思うかもしれません.
お役に立てれば!j