Я пытаюсь использовать everyauth
в пределах express
для аутентификации пользователей на веб-сайт, который позволяет добавлять текстовые комментарии к изображениям. В настоящее время я использую twitter oauth api для аутентификации моих пользователей.Everyauth и доступ к данным (twitter) oauth из findUserById
Теперь я пытаюсь создать пользовательскую базу данных пользователя, которая позволяет мне поддерживать несколько способов входа в систему, связанных с одной записью в CouchDB. У меня возникают проблемы, когда я хочу добавить нового пользователя в БД, когда он изначально подключается через твиттер. Код моего findUserById
гласит следующее:
everyauth.everymodule.findUserById (userId, callback) ->
users.findById userId, (err,res) ->
if res.id
# id returned, so there is an entry in the DB
callback null, res
else
# no entry in the DB, add a new one
users.saveById JSON.stringify(userId), {"name":"test"}, (saveErr, saveRes) ->
callback null, saveRes
everyauth.twitter
.consumerKey(config.twitterConsumerKey)
.consumerSecret(config.twitterConsumerSecret)
.findOrCreateUser((session, token, secret, user) ->
promise = @.Promise().fulfill user
).redirectPath '/'
findById
и saveById
являются методы в cradle
объекта, запрашивать базу данных, userId
обеспечивается everyauth, как это кажется.
Моя проблема находится в части {"name":"test"}
. Это место, где я хочу добавить данные из объекта req.session.auth.twitter
в базу данных. Как получить доступ к этим значениям из функции findUserById
?
Возможно ли это? Есть ли другой подход? Я смотрю на функцию findOrCreateUser, но я понятия не имею, как изменить это, не разбивая мое приложение - я еще не понимаю концепцию обещания.
Спасибо за подробное объяснение. Я действительно был так же смущен частью обещания, и из того, что я читал, эта парадигма осталась за узлом. Но паспорт выглядит очень многообещающим, я буду использовать его в своем следующем крупном проекте :) – arvidkahl