2015-07-17 15 views
7

Tôi đang sử dụng NPM ldapjsMeteor LDAP project này để thử bật LDAP trên trang web Kính viễn vọng kiểm tra của tôi. Vấn đề chính là tôi muốn LDAP là phương pháp đăng nhập duy nhất. Kế hoạch của tôi là có một trình bao bọc xung quanh phương thức đăng nhập Kính thiên văn (Meteor?) Được tích hợp sẵn. Nếu thông tin đăng nhập LDAP vượt qua, nó sẽ chạy tập lệnh đăng nhập Kính viễn vọng và tiếp tục như bình thường.Ghi đè trình xử lý đăng nhập mặc định của Meteor

Có lẽ đây là giải pháp hacky và giải pháp tốt hơn tồn tại? Trong mọi trường hợp, tôi cần LDAP để làm việc. Hiện tại, tôi đang cố gắng ghi đè phương thức đăng nhập mặc định bằng cách này:

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

Như nhận xét cho biết, lệnh nhật ký không bao giờ chạy (Tôi biết vì tôi đang sử dụng Chrome và bảng điều khiển sau khi cố đăng nhập trong là trống), và thêm vào đó, tôi nhận được điều này với mỗi tải trang:

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 

Dòng 45 là Template.signin.events({, vì vậy tôi đã kết luận rằng Template không có thành viên signin. Tôi đã thấy rằng Template.signin.events({...}) mã một vài nơi khác nhau (chỉ google "Template.signin.events" with the quotes), nhưng tôi đoán họ đã lấy nội dung đó ra bằng bản cập nhật Meteor?

Một phiên bản tôi đã cố gắng là

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

nhưng * thở hổn hển * điều đó không làm việc, hoặc. Nó không cung cấp cho tôi Uncaught TypeError mà tôi nhận được với mã ban đầu, nhưng tôi đoán nó chỉ không ghi đè lên trình xử lý chính xác.

Chỉ cần rõ ràng, đây là tất cả mã chạy phía máy khách trong gói tùy chỉnh của tôi. Tệp JS của tôi là một con trực tiếp của gói tùy chỉnh mà tôi có trong Kính viễn vọng.

Làm cách nào để ghi đè trình xử lý đăng nhập mặc định trong Meteor? (Ví dụ: làm thế nào để làm cho mã của tôi chạy khi bạn nhấp vào "đăng nhập" nút thay vì mã Meteor?)


Cập nhật:

Theo yêu cầu, tôi đã thử các bước trong this short walkthrough hiển thị ví dụ về "Mở rộng tài khoản sao lưu". Tôi nhận được rất nhiều lỗi trong bảng điều khiển ở phía máy khách và một lỗi trong bảng điều khiển ở phía máy chủ. Tôi có cảm giác đang xảy ra bởi vì gợi ý là một gợi ý không phù hợp với Kính viễn vọng, nhưng có lẽ nếu tôi có một trường hợp cũ của Meteor, nó sẽ hoạt động.

+0

Có thể [bài đăng này] (https://meteorhacks.com/extending-meteor-accounts) có thể trợ giúp? –

+0

Trong googling e-x-t-e-n-s-i-v-e của tôi, tôi đã xem qua bài đăng đó. Tôi đã xem xét những gì họ phải nói, nhưng tôi đã không theo đuổi con đường đó bởi vì tôi nghĩ, "Tôi không nghĩ rằng nó sẽ kết hợp với chức năng của Kính viễn vọng." Nhưng có lẽ nó sẽ. Tôi đang cố gắng. –

+0

Tôi đã cập nhật bài đăng để phản ánh cách bài đăng David đề xuất ảnh hưởng đến kết quả của tôi. –

Trả lời

4

Cách thích hợp để đạt được điều này sẽ làm điều đó cùng một cách mà kính viễn vọng hiện nó trong dự án riêng của họ:

Đầu tiên, kính viễn vọng nhân bản vào thư mục gói của bạn, do đó bạn có thể tùy chỉnh nó. Lưu ý rằng Kính viễn vọng hoàn toàn được làm từ các gói. Đây là những mô-đun Kính viễn vọng cốt lõi tạo nên ứng dụng. Tôi tin rằng bạn chỉ cần chỉnh sửa 2 mô-đun sau: telescope-coretelescope-users.

Trong telescope-core, cấu hình cho chế độ xem đăng nhập được xác định tại packages/telescope-core/lib/config.js. Tôi sẽ thêm/xóa bất kỳ trường nào ở đây và bạn cũng có thể ghi đè các mẫu cũng như các chuyển hướng.

Trong telescope-users, có thể bạn sẽ quan tâm nhất đến packages/telescope-users/lib/callbacks.js. Đây là nơi bạn sẽ đặt mã mà bạn đang đưa vào trình xử lý sự kiện của mình.

Lưu ý rằng Kính viễn vọng sử dụng thư viện tùy chỉnh của riêng họ để xử lý các cuộc gọi lại mà bạn cũng sẽ phải sử dụng. May mắn thay, nó rất đơn giản. Bạn chỉ cần thêm gọi lại với Telescope.callbacks.add(hook, callback) và xóa chúng bằng Telescope.callbacks.remove(hook, callback). Ngoài ra, phiên bản async của Telescope.add có sẵn tại Telescope.runAsync.

Trước tiên, bạn sẽ muốn xem qua các cuộc gọi lại hiện có và loại bỏ bất kỳ điều gì tạo tài khoản theo mặc định. Móc cụ thể bạn sẽ muốn tìm kiếm nhiều khả năng là onCreateUser. Vì vậy, chỉ cần tìm kiếm github của họ cho Telescope.callbacks.add('onCreateUser',... Bạn sẽ muốn làm điều tương tự với các móc sưu tập của chúng cũng được định nghĩa trong cùng một tệp và thay thế chúng khi bạn thấy phù hợp.

Hy vọng điều này sẽ hữu ích.

Các vấn đề liên quan