2017-10-10 12 views
1

Accounts.createUser()와 Accounts.onCreateUser() 간의 관계를 이해할 수없는 것 같습니다. 사용자의 로그인 자격 증명을 확인하는 외부 API가 있습니다. API가 나에게 긍정적 인 응답을 보내면 MongoDB에 사용자를 추가하고 세션을 시작하여 에 로그인하여 사용자로 로그인해야합니다. Accounts.createUser()는 서버 측에서 사용자를 만들고 있지만 외부 API에서 생성되는 사용자 토큰과 같은 사용자 정의 필드를 추가해야하기 때문에 Accounts.onCreateUser()가 필요합니다.서버 측에서 수동으로 사용자 추가 및 세션 설정

서버 측 코드 :

var request = { 
'headers': { 
    'Content-Type': 'application/x-www-form-urlencoded' 
}, 
'params': user 
}; 

try { 

var response = HTTP.call('POST', url, request); //send call to the external api 
var token = response.data.token; 
//decode the token and add the user in the database 
var userInfo = Base64.decode(token.split('.')[1]); 

var options = { 
    email: user._username, 
    profile: { 
    name: user._username 
    }, 
    token: token 
}; 

var user = Accounts.onCreateUser(function(options, user) { 
    if (options.token) 
     user.token = options.token; 
    if (options.profile) 
     user.profile = options.profile; 
    return user; 
}); 

console.log(user); //this returns undefined 
return JSON.stringify({ 
    'code': 200, 
    'token': userInfo 
}); 
} catch (error) { 
    console.log(error); 
//console.log(error.response); 
var body = error.response.content; 
return body; 
} 

답변

1

좋아

는 (모든 사용자를 추가하지 않습니다) 내가 지금 가지고있는 코드입니다. 그래서 나는 마침내 내가 찾고 있었던 것을 발견했다. Accounts.createUser와 Accounts.onCreateUser 사이의 관계는 Accounts.onCreateUser가 후크이며 확장 된 기능을 원래 Accounts.createUser 함수에 추가한다는 것입니다. 확장 기능이란 무엇입니까? 실제로 데이터베이스에 사용자를 삽입하기 전에 추가 필드를 작성할 수 있습니다. 당신은 시작 코드에 main.js (서버 측)이 후크를 작성해야 :

Meteor.startup(() => { 
Accounts.onCreateUser(function(options, user) { 
if (options.token) 
    user.token = options.token; 
if (options.profile) 
    user.profile = options.profile; 
return user; 
}); 
}) 

그리고 사용자를 추가하여 원하는 목적지, 단순히 Accounts.createUser을 (전화)이 후크가 호출된다 createUser 호출 전에 자동으로