웹개발 Q&A


웹개발 Q&A
웹 개발과 관련된 질문과 답을 쓰고 공유할 수 있는 곳입니다.
9강 페이스북 인증 질문입니다.
독학
이미지 슬라이더 보기
1. database.UserModel.load is not function 문제 질문.

var options = {
// criteria : {'facebook.id' : profile.id}
'facebook.id': { $exists: true },
'facebook.id': profile.id
};

var database = app.get('database');
database.UserModel.findOne(options, function(err, user) {

질문! => load가 안되서  findOne으로 바꾸니 문제는 해결됐는데 이게 맞는지요? load는 왜 안되는 건가요?
그리고 findOne 과 load 메소드는 어디에 정의 되어 있는 건가요?
그리고 criteria는 뭔가요? 왜 아래 처럼 해야 가능한건가요?



2. Cannot read property '0 of undefined 문제 질문.

if (!user) {
var user = new database.UserModel({
name: profile.displayName,
email: profile.emails[0].value,
provider: 'facebook',
authToken: accessToken,
facebook: profile._json
});

질문 ! => console에 찍힌 걸 보니 ` email: profile.emails[0].value 부분이 문제 인 것 같습니다.
일단 console에서 profile을 보니까 email 자체가 존재 하지 않습니다. 그런데 어떻게 profile.emails 라는게 존재 할 수 있나요? 존재해야 email을 DB에 담는 걸로 알고 있습니다. 그리고 facebook에 profile._json은 왜 담는 건가요?


* console에 찍힌 profile ( id와 displayName은 가짜로 처리하겠습니다. )
 
{ id: '000000000000',
  username: undefined,
  displayName: 'Hong gil dong',
  name:
   { familyName: undefined,
     givenName: undefined,
     middleName: undefined },
  gender: undefined,
  profileUrl: undefined,
  provider: 'facebook',
  _raw: '{"name":"Hong gil dong","id":"000000000000"}',
  _json: { name: 'Hong gil dong', id: '000000000000' } }
2017-08-02 17:14:20
123.109.100.***
덧글 2개 | 태그 0개
태그입력
쉽표(,)구분으로 한번에 여러 태그를 입력할수 있습니다
이용준
저도 여기서 막혀서 알아봤는데
https://stackoverflow.com/questions/22880876/passport-facebook-authentication-is-not-providing-email-for-all-facebook-account
여기서 알아냈습니다.
FacebookStrategy 객체 생성할때 profileFields : ['id','email','name']
이값도 넘겨줘야하더군요 책에는 안나와있지만..링크 참조해보세요~
118.223.229.*** 2017-08-02 07:04:38
독학
이용준 님 일단 감사합니다.
참고해서 하니 잘되는군요. 

그런데 저는 ' hashed_password 칼럼의 값이 없습니다. ' 오류가 생겨서
user_schema.js 에서 아래 코드를 삭제하니 잘됩니다. 그런데 이용준님도 아래코드를 삭제하고 실행하신건가요.?


```
//값이 유효한지 확인하는 함수 정의
var validatePresenceOf = function(value) {
return value && value.length;
};

//저장 시의 트리거 함수 정의 (password 필드가 유효하지 않으면 에러 발생)
UserSchema.pre('save', function(next) {
if (!this.isNew) return next();
if (!validatePresenceOf(this.password)) {
next(new Error('유효하지 않은 password 필드입니다.'));
} else {
next();
}
});


UserSchema.path('hashed_password').validate(function (hashed_password) {
 return hashed_password.length;
}, 'hashed_password 칼럼의 값이 없습니다.');

``` 
124.254.246.*** 2017-08-02 17:14:20
이름 비밀번호