2015-07-17 18 views
7

Używam NPM ldapjs i tej Meteor LDAP project, aby spróbować włączyć LDAP w mojej witrynie testowej Teleskopu. Główną kwestią jest to, że chcę, by LDAP był jedyną metodą logowania. Mój plan polega na tym, żeby mieć wrapper dookoła wbudowanej metody logowania Telescope (Meteor?). Jeśli poświadczenia LDAP przepuszczą, uruchamia skrypt logowania Teleskopu i działa normalnie.Zastępowanie domyślnego handlera Meteora

Być może jest to hacky, a rozwiązanie jest lepsze? W każdym razie potrzebuję LDAP do pracy. W tej chwili staram się zastąpić domyślną metodę logowania z tym:

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'); 
     }); 
    } 
}); 

Jako komentarz mówi, nigdy polecenie dziennika działa (wiem, bo używam Chrome, a konsola po próbie logowania w jest puste), a dodatkowo, mam to z każdym ładowania strony:

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 

Linia 45 jest Template.signin.events({, więc doszedłem do wniosku, że Template nie posiada człon signin. Widziałem, że Template.signin.events({...}) koduję kilka różnych miejsc (tylko google "Template.signin.events" with the quotes), ale myślę, że zabrali te rzeczy z aktualizacją Meteor?

Inna wersja Próbowałem to

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

ale * gasp * że nie działa. To NIE daje mi Uncaught TypeError, którą otrzymuję z oryginalnym kodem, ale myślę, że po prostu nie zastąpi poprawnego programu obsługi.

Dla jasności, to jest cały kod, który działa po stronie klienta w niestandardowym pakiecie. Mój plik JS jest bezpośrednim potomkiem niestandardowego pakietu, który mam w Teleskopie.

Jak nadpisać domyślny program do logowania w Meteor? (To znaczy w jaki sposób mogę dokonać mojego kodu run Po kliknięciu „Zaloguj” przycisku zamiast kodu meteoru?)


Aktualizacja:

Na życzenie Próbowałem kroki this short walkthrough, który pokazuje przykład "Rozszerzanie kont meteorytów". Dostaję dużo błędów w konsoli po stronie klienta i jeden błąd w konsoli po stronie serwera. Mam wrażenie, że tak się dzieje, ponieważ sugestia nie pasuje dokładnie do Teleskopu, ale być może gdybym miał zwykły stary egzemplarz Meteora, zadziałałby.

+0

Może [ten wpis] (https://meteorhacks.com/extending-meteor-accounts) może pomóc? –

+0

W moim googlowaniu e-x-t-e-n-s-i-v-e trafiłem na ten post. Zastanawiałem się, co mają do powiedzenia, ale nie podążałem tą drogą, ponieważ pomyślałem: "Nie sądzę, że byłoby to zgodne z funkcjonalnością Teleskopu". Ale może tak. Właśnie próbuję. –

+0

Zaktualizowałem wpis, aby odzwierciedlić to, w jaki sposób post rekomendowany przez Davida wpłynął na mój wynik. –

Odpowiedz

4

Właściwym sposobem osiągnięcia tego celu byłoby zrobić to w ten sam sposób, że teleskop robi to w swoim projekcie:

Pierwszy teleskop, klon w katalogu pakietów, dzięki czemu można go dostosować. Zauważ, że Teleskop jest w całości wykonany z pakietów. Są to podstawowe moduły Telescope, które składają się na aplikację. Uważam, że powinieneś edytować tylko 2 moduły: telescope-core i telescope-users.

W konfiguracji telescope-core konfiguracja widoków logowania jest zdefiniowana na packages/telescope-core/lib/config.js. Dodałbym/usunę wszelkie pola tutaj, a także możesz przesłonić szablony i przekierowania.

W telescope-users prawdopodobnie będziesz najbardziej zainteresowany packages/telescope-users/lib/callbacks.js. Tutaj możesz umieścić kod, który umieszczasz w swoich programach obsługi zdarzeń.

Należy pamiętać, że Telescope używa własnej biblioteki do obsługi wywołań zwrotnych, z której również będziesz musiał korzystać. Na szczęście jest to bardzo proste. Po prostu dodaj wywołania zwrotne za pomocą Telescope.callbacks.add(hook, callback) i usuń je za pomocą Telescope.callbacks.remove(hook, callback). Również asynchroniczne wersje Telescope.add są dostępne pod adresem Telescope.runAsync.

Najpierw będziesz chciał przejrzeć istniejące wywołania zwrotne i pozbyć się wszystkiego, co tworzy konto domyślnie. Konkretny hak, którego chcesz szukać, najprawdopodobniej jest onCreateUser. Po prostu wyszukaj ich github dla Telescope.callbacks.add('onCreateUser',... Będziesz chciał zrobić to samo z ich hakami kolekcjonerskimi, które również są zdefiniowane w tym samym pliku i zastąpić te, które uznasz za stosowne.

Mam nadzieję, że to pomoże.