사용자의 역할에 따라 사용자 데이터를 선택적으로 게시하려고합니다. 전자 메일 주소를 게시하고 사용자 이름을 원합니다. 사용자가 관리자 인 경우 전체 사용자 프로필을 볼 수 있어야합니다.Meteor 게시 추가 사용자 정보 로그인/로그 아웃
Meteor.publish "allUsers", ->
if Roles.userIsInRole @userId, 'admin' then data = profile: 1
else data = 'profile.name': 1
data['emails.address'] = 1
Meteor.users.find {}, fields: data
클라이언트 (CS)의 경우 : 서버 (CS)에
는Meteor.subscribe("allUsers")
이 대부분의 시간을 잘 작동합니다. 사용자가 로그 아웃 한 다음 다시 로그인하면 구독으로 인해 문제가 발생하고
Meteor.user().profile
아무 것도 반환하지 않습니다. 페이지를 새로 고치면 프로필 필드가 다시 채워집니다. 문제를 해결하기 위해 서버 반환 명세서를 다음으로 변경했습니다.
[
Meteor.users.find {}, fields: data
Meteor.users.find @userId
]
아무 것도하지 않았습니다. 이것은 Meteor의 버그입니까, 아니면 근본적으로 로그인/로그 아웃을 오해하고 있습니까?
업데이트
내가 좀 더 읽고는 유성 무작위로 여러 구독에 대한 데이터를 선택할 것으로 보인다/같은 수집에 게시합니다. 이를 염두에두고 다음과 같이 반환 쿼리를 변경했습니다.
Meteor.users.find _id: $ne: @userId, fields: data
다른 사용자의 데이터가 게시되지 않았습니다. (Meteor.users.find(). console()의 count()는 1을 반환합니다.)
기능이 충돌되지 게시 할 수 있습니다. userId가 null 일 때 발생하는 모든 작업은 Roles.userIsInRole이 undefined를 반환한다는 것을 의미합니다. 즉, else 문이 발생했습니다. 이것은 문제를 해결하기 시작하지 않습니다. 익명 사용자는이 정보에 계속 액세스 할 수 있어야합니다. userId가 없으면 반환하지 않습니다. 이 방법이 효과가 없을지라도 로그 아웃했다가 다시 로그인하면 프로필 필드가 채워지지 않습니다. 시도해 줘서 고마워. – cazgp
아 그래, 익명 사용자가 그 정보를 얻길 원하는지 모르겠다. Meteor.users.find()를 호출하기 전에 _data_ 값을 바로 로그합니다. 서버 측 디버깅 도구 설정이 없다면, 단순히 console.log()를 사용하면 Meteor를 시작한 터미널 (a.k.a. 명령 프롬프트)로 출력됩니다. 값만 확인하지 말고 각 작업 (게시/로그 아웃) 후에 게시 기능이 실제로 호출되는지 확인하십시오. – travellingprog
호출하기 전에 데이터 값을 기록했습니다 ... 물론 게시 기능은 로그인/로그 아웃 할 때 호출됩니다. 로그 아웃, 그게 무슨 일이야! 이것은 정말로 문제의 근원이 아닙니다. 동일한 컬렉션에서 여러 구독과 관련이 있습니다. – cazgp