7

NPM ldapjsとこのMeteor LDAP プロジェクトを使用して、テスト用の Telescope Web サイトで LDAP を有効にしようとしています。主な問題は、LDAP を唯一のログイン方法にしたいということです。私の計画は、組み込みの Telescope (Meteor?) ログイン方法のラッパーを用意することです。LDAP クレデンシャルがパスすると、Telescope ログイン スクリプトが実行され、通常どおり続行されます。

おそらくこれはハッキーな解決策であり、より良い解決策が存在しますか? いずれにせよ、動作するには LDAP が必要です。現在、デフォルトのログイン方法をこれで上書きしようとしています:

Template.signin.events({
    'submit': function(event, template){
        Session.set('errorMessage', null);
        event.preventDefault();
        console.log("My login script ran!"); // I never see this message =(
        return Meteor.loginWithLDAP(template.find('#login-username').value,
            template.find('#login-password').value, function(error) {

            return Session.set('errorMessage', 'Login failed');
        });
    }
});

コメントにあるように、log コマンドは実行されません (私は Chrome を使用していて、ログインしようとした後のコンソールが空白であるため、私は知っています)、さらに、ページを読み込むたびにこれを取得します:

Uncaught TypeError: Cannot read property 'events' of undefined
    (anonymous function) @ ldap_client.js:45
    (anonymous function) @ typ_accounts-ldap.js?0ad074ecfc292bededc7d318da4746392aa0f5f8:94
    (anonymous function) @ typ_accounts-ldap.js?0ad074ecfc292bededc7d318da4746392aa0f5f8:101

行 45 はであるため、 にはメンバーがないTemplate.signin.events({と結論付けました。私はそのコードをいくつかの異なる場所で見てきました(引用符で「Template.signin.events」をグーグルで検索するだけです)が、彼らはMeteorの更新でそのようなものを取り除いたと思いますか?TemplatesigninTemplate.signin.events({...})

私が試した別のバージョンは

Template.loginButtons.events({
    'submit #login-form': function(event, template){
        ...blah blah blah...

しかし、それもうまくいきません。元のコードで取得したものは得られませんがUncaught TypeError、正しいハンドラーの上書きに失敗しただけだと思います。

明確にするために、これは私のカスタム パッケージ内でクライアント側で実行されるすべてのコードです。私の JS ファイルは、Telescope にあるカスタム パッケージの直接の子です。

Meteor でデフォルトのログイン ハンドラーを上書きするにはどうすればよいですか? (つまり、Meteor のコードではなく、「ログイン」ボタンをクリックしたときにコードを実行するにはどうすればよいですか?)


アップデート:

リクエストに応じて、「Meteor アカウントの拡張」の例を示すこの短いウォークスルーの手順を試しました。クライアント側のコンソールに多くのエラーが表示され、サーバー側のコンソールに 1 つのエラーが表示されます。提案は特に Telescope ではうまく機能しないため、それが起こっているように感じますが、おそらく Meteor の単純な古いインスタンスがあればうまくいくでしょう。

4

1 に答える 1

4

これを実現する適切な方法は、Telescope が独自のプロジェクトで行うのと同じ方法で行うことです。

まず、カスタマイズできるように、望遠鏡をパッケージ ディレクトリに複製します。Telescope は完全にパッケージで構成されていることに注意してください。これらは、アプリを構成するコア Telescope モジュールです。次の 2 つのモジュールを編集するだけでよいと思います: telescope-core、およびtelescope-users

ではtelescope-core、サインイン ビューの設定は で定義されていpackages/telescope-core/lib/config.jsます。ここでフィールドを追加/削除します。また、テンプレートとリダイレクトをオーバーライドすることもできます。

ではtelescope-users、おそらく に最も関心があるでしょうpackages/telescope-users/lib/callbacks.js。これは、イベント ハンドラーに配置するコードを配置する場所です。

Telescope は、コールバックを処理するために独自のカスタム ライブラリを使用することに注意してください。これも使用する必要があります。幸いなことに、それは非常に簡単です。でコールバックを追加しTelescope.callbacks.add(hook, callback)、 で削除するだけTelescope.callbacks.remove(hook, callback)です。の非同期バージョンもTelescope.addで入手できますTelescope.runAsync

まず、既存のコールバックを調べて、デフォルトでアカウントを作成するものをすべて取り除きます。探したい特定のフックは、おそらくonCreateUser. そのため、github で を検索してTelescope.callbacks.add('onCreateUser',..ください。同じファイルで定義されているコレクション フックでも同じことを行い、必要に応じてそれらを置き換えます。

お役に立てれば。

于 2015-07-25T21:06:33.523 に答える