2017-10-10 11 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コールの前に自動的に

関連する問題