Я пытаюсь отправить по электронной почте пароль сброса для модели User
loopback по умолчанию, но она просто не работает.Я попробовал и прочитал все возможные примеры, которые мог найти, ни один из них не работал.
Я пытался следовать официальной документации для коннектора электронной почты, и это мое datasources.json
"emailDs": {
"name": "emailDs",
"connector": "mail",
"transports": [
{
"type": "smtp",
"host": "smtp.gmail.com",
"secure": true,
"port": 465,
"auth": {
"user": "myemail@gmail.com",
"pass": "password"
}
}
]
}
для model-config.json
У меня есть
...
"Role": {
"dataSource": "db",
"public": false
},
"Email": {
"dataSource": "emailDs"
},
"user": {
"dataSource": "db",
"public": true,
"options": {}
}
Как вы можете видеть в этом файле, я также создал новую модель с именем user
(без заглавной буквы U, что расширяет модель User
по умолчанию. Я просто скопировал код этого пользователя из thisпример (прокрутите вниз для сброса пароля пользователя).
Я зарегистрировал новую модель user
, чтобы видеть ее в domain.com:3000/explorer/
.. Итак, у меня есть модели user
и User
.
Я также создал файл в /boot/routes.js
и вставил весь код из приведенного выше примера.
Теперь, так как у меня настроен источник данных электронной почты в datasources.json
, он должен работать или нет?Потому что я попытался опубликовать сброс пароля с помощью /Users/reset
, для которого в этой форме требуется только электронная почта (вероятно)
{
"email":"myuseraccount@email.com"
}
, которая является электронной почтой пользователя, который уже зарегистрирован. ПростоКстати, я работаю над приложением для Android, регистрация и вход в систему работают нормально. Поэтому я нажал кнопку Try it out
o выполнить запрос сброса пароля, я получаю 204 Request was successful
, но я не получаю электронной почты.Даже консоль узла не отображает никаких ошибок, только когда я ввожу электронную почту, которой нет в базе данных зарегистрированных пользователей, ..
Для моей конфигурации электронной почты Gmail (электронная почта, которая должна отправлять сообщения о сбрасывании пароля пользователям),Я включил доступ к менее защищенным приложениям в учетной записи Gmail, я также попытался включить двухэтапную проверку и создал учетную запись для приложения, где gmail предоставил мне уникальный пароль только для этого приложения.Я использовал этот пароль и ввел его в datasources.json
, и этот пароль никогда не использовался для входа в систему, так что это означает, что loopback никогда не выполняет функцию send
для отправки этого сообщения о сбрасывании пароля, что полностью разочаровывает!
Есть идеи, как правильно настроить его для этого пользователя по умолчанию?Кстати, я пытался отправить запрос на пропуск от обеих моделей, User
и user
, и ни одна из них не работала ....
// Обновление
Я проследил, что когда я отправляю запрос по электронной почте (например, с помощью почтальона), выполняется функция User.resetPassword = function(options, cb) { .. }
по умолчанию User
модель user.js
.Но что должно последовать дальше?Звоню send email
куда-нибудь, но как и где?Я пытался понять документацию, но ее очень сложно понять.
// Обновление 2 Несмотря на то, что официальная документация говорит, что не нужно редактировать модель User
по умолчанию, я редактировал ее.
Я добавил функцию отправки, и теперь она, наконец, отправляет электронную почту:
//send password reset link when requested
User.on('resetPasswordRequest', function(info) {
var url = 'http://mywebsite.com:3000/api/Users/reset-password';
var html = 'Click <a href="' + url + '?access_token=' +
info.accessToken.id + '">here</a> to reset your password';
User.app.models.Email.send({
to: info.email,
from: null,
subject: 'Password reset',
html: html
}, function(err) {
if (err) return console.log('> error sending password reset email');
console.log('> sending password reset email to:', info.email);
});
});
Проблема в том, что пароль сброса не работает, потому что, когда я получаю письмо, я нажимаю на URL, и все, что яget равен 401 Unauthorized access
и через некоторое время он говорит Invalid token
, я полагаю, у него есть некоторое время истечения.