2014-05-07 21 views
5

Tôi đang sử dụng ember-simple-auth trong ứng dụng của mình và nó hoạt động tốt, nhưng tôi muốn có thể hiển thị các thuộc tính từ người dùng hiện tại (chẳng hạn như email hoặc tên) trong giao diện người dùng. Trong quá khứ tôi đã sử dụng một trình khởi tạo ứng dụng để làm điều này và về cơ bản sẽ tiêm tất cả các bộ điều khiển với currentUser, nhưng điều đó yêu cầu người dùng hiện tại phải được biết khi ứng dụng được khởi tạo. Vì tôi đang sử dụng OAuth, người dùng không được biết khi nào ứng dụng tải.Truy cập thông tin tài khoản của người dùng với Ember Simple Auth

Có cách nào để nhận các thuộc tính từ người dùng hiện đã đăng nhập không?

Trả lời

7

Hóa ra phiên bản ember-simple-auth tôi đã sử dụng đã lỗi thời và cần nâng cấp lên 0.3.x (từ 0.2.x). Từ đó, tôi đã có thể thêm một trình xác thực tùy chỉnh mà tôi đã lấy gần như trực tiếp từ các tệp mẫu của dự án. Lưu ý rằng tôi đang sử dụng phiên bản Ember 1.6.0 beta 2.

Với mã bên dưới, tôi có thể truy cập CurrentUser trong các tuyến và bộ điều khiển bằng cách sử dụng this.get('session.currentUser') hoặc trong các mẫu sử dụng {{session.currentUser}}.

Thay đổi duy nhất tôi phải thực hiện cho API của mình là bao gồm user_id với phản hồi OAuth.

cập nhật từ các câu trả lời trước để hỗ trợ 0.4.0

Sau đó, tôi được cập nhật initializer của tôi là như sau:

App.initializer({ 
    name: 'authentication', 

    initialize: function(container, application) { 
    Ember.SimpleAuth.Authenticators.OAuth2.reopen({ 
     serverTokenEndpoint: '/api/oauth/token' 
    }); 

    Ember.SimpleAuth.Session.reopen({ 
     currentUser: function() { 
     var userId = this.get('user_id'); 
     if (!Ember.isEmpty(userId)) { 
      return container.lookup('store:main').find('current-user', userId); 
     } 
     }.property('user_id') 
    }); 

    Ember.SimpleAuth.setup(container, application, { 
     authorizerFactory: 'ember-simple-auth-authorizer:oauth2-bearer', 
     routeAfterAuthentication: 'main.dashboard' 
    }); 
    } 
}); 

điều khiển đăng nhập của tôi bây giờ trông như thế này:

export default Ember.Controller.extend(Ember.SimpleAuth.LoginControllerMixin, { 
    authenticatorFactory: 'ember-simple-auth-authenticator:oauth2-password-grant' 
}); 
+1

Đây là vàng tuyệt đối! Tôi đã đấu tranh để tìm một cách tốt để làm điều này với ember-đơn giản-auth trong nhiều tháng. Điều này thực sự phải là một phần của tài liệu (nếu không phải là việc thực hiện tiêu chuẩn). – opsb

+0

@opsb Tôi vừa cập nhật câu trả lời của tôi bởi vì nó có thể được đơn giản hóa nhiều hơn sau khi phát hành gần đây của ember-simple-auth. Trình xác thực tùy chỉnh không còn cần thiết nữa. –

+0

đẹp, trông đẹp hơn. – opsb

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