1

認証に Mozilla Persona を使用するポータル用の FirefoxOS アプリを作成しようとしています。達成したい場合の進め方:

  • アプリのユーザーがペルソナを使用してポータルにサインアップできるようにする
  • アプリのユーザーが FirefoxOS アプリ内のポータルにログインし、API でいくつかのアクションを実行できるようにする
  • ユーザーがログに記録されているかどうかに依存します - さまざまなアクションへのアクセスを提供します。

既に統合されているという情報を含むこの投稿を見つけました: http://identity.mozilla.com/post/47114516102/persona-on-firefox-os-phonesしかし、実際の例は見つかりません。

どのタイプのアプリケーションを作成する必要がありますか? webappまたは特権?

通常のチュートリアルを使用して実装しようとしています: https://developer.mozilla.org/en/Persona/Quick_Setup

しかし、このコードでは:

  signinLink.onclick = function() { navigator.id.request(); };

次のエラーのみが表示されます。

[17:25:18.089] Error: Permission denied to access object
4

1 に答える 1

2

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

于 2014-03-03T18:26:07.303 に答える