問題

私はテスト望遠鏡のウェブサイトでLDAPを有効にしようとするために、 NPM ldapjs とこの Meteor LDAPプロジェクトを使用しています。主な問題は、LDAPをログインの唯一の方法にしたいということです。私の計画は、built-in telescope(Meteor?LDAP)ログインメソッドの周りにラッパーを持つことです。資格情

おそらくこれはハッキーなソリューションであり、より良いものが存在しますか?いずれにせよ、私は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({なので、Templatesigninメンバーがないと結論づけました。私はTemplate.signin.events({...})コードがいくつかの異なる場所( Google "Template.signin.events"と引用符)を見てきましたが、Meteorアップデートでそのものを取り出したと思いますか?

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

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

しかし、* gasp *も動作しません。元のコードで取得したUncaught TypeErrorは表示されませんが、正しいハンドラを上書きできないと思います。

ちょうど明確にするために、これは私のカスタムパッケージ内でclient-sideを実行するすべてのコードです。私のJSファイルは、私が望遠鏡で持っているカスタムパッケージの直接の子です。

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


更新:

要求に応じて、 "Extending Meteor Accounts"の例を示すのこの短いウォークスルーのステップを試しました。クライアント側のコンソールに多くのエラーが表示され、サーバー側のコンソールに1つのエラーが表示されます。提案は、特に望遠鏡でうまくいかないものであるため、それが起こっていると感じていますが、おそらく私がMeteorの普通の古いインスタンスを持っ

  ベストアンサー

これを達成する適切な方法は、望遠鏡が自分のプロジェクトで行うのと同じようにすることです。

まず、望遠鏡をパッケージディレクトリに複製してカスタマイズできます。望遠鏡は完全にパッケージで構成されていることに注意してください。これらはアプリを構成する中核望遠鏡モジュールです。私はあなたが次の2つのモジュールを編集する必要があると信じています:telescope-coretelescope-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です。したがって、Telescope.callbacks.add('onCreateUser',..のgithubを検索するだけです。同じファイルで定義されているコレクションフックで同じことをしたいと思います。

これが役立つことを願っています。

  同じタグがついた質問を見る

javascriptnode.jsmeteorldaptelescope