내 Meteor 앱 사용자는 '수동으로'계정을 만들거나 accounts-facebook 패키지로 계정을 만들 수 있습니다.Meteor에서 다양한 구조의 사용자 데이터를 정규화하는 방법은 무엇입니까?
가 수동으로 다음 계정을 만드는 경우 데이터베이스에 자신의 이메일은 다음과 같이 저장됩니다
emails: [address: '[email protected]', verified: false]
을하지만 그들은 다음 페이스 북의 로그인을 사용하는 경우는 다음과 같이 저장 :
services: {
facebook: {
email: "[email protected]"
}
}
내가 가진 사용자 이메일을 표시하고 변경 가능하게하는 사용자 계정 페이지. 다양한 구조를 어떻게 처리 할 수 있습니까?
사용자의 이메일을 표시하기 위해이 React 구성 요소를 만들었습니다. 방금 기본 Meteor 사용자 프로필을 만들었지 만 props.user.email doenst가 존재하므로 Facebook 로그인에 오류가 추가되었습니다.
<div className="form-primary__row">
<label>Email:</label>
{props.user.emails.map((item, i) => {
return (
<input defaultValue={item.address} key={i} name="email" />
);
})}
</div>
이것은 사용자가 이메일을 업데이트하는 나의 방법입니다. 그것은 Meteors 계정을 가지고 있었지만 페이스 북에서 작동하지 않을 때도 효과가있었습니다.
Meteor.methods({
'user.updateEmail'({ email }) {
Meteor.users.update(
{ _id: Meteor.userId() },
{
$set: {
'emails.0.address': email,
'emails.0.verified': false,
},
},
);
},
});
매뉴얼 전자 메일을 유사한 구조 형식으로 저장하는 것은 어떻습니까? 예 : '''services.manual.email''' 수동 전자 메일이나 fb 전자 메일 만 존재할 수 있다고 가정하면 둘 중 어느 것이 든 둘 중 하나를 기반으로 반환하도록 논리를 프로그래밍 할 수 있습니다. 나는 이것이 클라이언트 코드에서 표준화 될 수 있고 클라이언트가받은 객체의 구조에 대해 걱정할 필요가 없도록 클라이언트에 표준 객체로 되돌려 보낼 수 있다고 생각한다. – blueren
게시 기능에서 정상화 할 수 있습니까? 클라이언트 구성 요소 (예 : 내 계정 페이지)에서 정상화하면 DRY 보안 주체를 위반하는 다른 페이지에서도 동일한 작업을 수행해야 할 수 있습니다. – Evans
네, ['''Accounts.onCreateUser()'''(http://docs.meteor.com/api/accounts-multi.html#AccountsServer-onCreateUser)를 사용할 수있을 것 같습니다. 새로운 사용자가 생성되면 (수동 또는 fb를 거치지 않고) 해당 전자 메일을 가져 와서'''emails'' 배열을 채 웁니다. 그렇게하면 발행물이나 클라이언트 측 렌더링을 만질 필요가 없습니다. – blueren