Parse-Server, ошибка проверки электронной почты?

Я застрял дольше, чем хотелось бы, с проблемой, связанной с проверкой электронной почты при создании учетной записи на Parse-Server (/Heroku). Хотя я сделал несколько постов по этому вопросу, мне не повезло (или, может быть, я недостаточно ясно сформулировал вещи), чтобы получить существенную помощь. Поэтому я решил повторить все сначала, на этот раз предоставив точный пошаговый способ воспроизвести ошибку для всех, кто хочет внимательно изучить ее. Если то, что я делаю, правильно от начала до конца, то должна быть ошибка. С другой стороны, если я делаю что-то не так (скорее всего, так оно и есть), я надеюсь, что кто-нибудь укажет на ошибку.

Вот процесс, начните с создания приложения на героку, используя следующие команды в терминале:

git clone https://github.com/parse-community/parse-server-example.git
mv parse-server-example linkbugapp808
cd linkbugapp808/
npm install @parse/simple-mailgun-adapter  --save
heroku create linkbugapp808

heroku addons:create mongolab:sandbox
heroku config:set APP_ID=ABCDEF-12345678:xytzt_SSTTJJZ
heroku config:set MASTER_KEY=MMMMM-87878787:wwyyssaa_PPGHYU
heroku config:set SERVER_URL=https://linkbugapp808.herokuapp.com/
heroku config:set PARSE_PUBLIC_SERVER_URL=https://linkbugapp808.herokuapp.com

Конечно, если имя, которое я использую, «linkbugapp808», занято или вам оно не нравится, вы можете выбрать другое.

Установите файл index.js следующим образом (исправление параметров почтового пистолета, которые необходимо исправить, чтобы они соответствовали вашей среде):

var express = require('express');
var ParseServer = require('parse-server').ParseServer;
var path = require('path');
var mongo = require('mongodb');
var MongoClient = mongo.MongoClient;

var databaseUri = process.env.DATABASE_URI || process.env.MONGODB_URI;

if (!databaseUri) {
  console.log('DATABASE_URI not specified, falling back to localhost.');
}

var api = new ParseServer({
  databaseURI: databaseUri,
  cloud: process.env.CLOUD_CODE_MAIN || __dirname + '/cloud/main.js',
  appId: process.env.APP_ID,
  masterKey: process.env.MASTER_KEY,
  serverURL: process.env.SERVER_URL,
  publicServerURL: process.env.PARSE_PUBLIC_SERVER_URL,
  appName: 'LinkBugApp',
  verifyUserEmails: true,
  emailAdapter: {
    module: '@parse/simple-mailgun-adapter',
    options: {
      fromAddress: '[email protected]',
      domain: 'some.domain',
      apiKey: 'key-apiKey-mailgun-apiKey'
    }
  }
});

var app = express();

// Serve static assets from the /public folder
app.use('/public', express.static(path.join(__dirname, '/public')));
app.set('port', (process.env.PORT || 5000));
app.use(express.static(__dirname + '/public'));
app.set('views', __dirname + '/views');
app.set('view engine', 'ejs');

// Serve the Parse API on the /parse URL prefix
var mountPath = process.env.PARSE_MOUNT || '/parse';
app.use(mountPath, api);

// Parse Server plays nicely with the rest of your web routes
app.get('/', function(req, res) {
  res.status(200).send('I dream of being a website.  Please star the parse-server repo on GitHub!');
});

// There will be a test page available on the /test path of your server url
// Remove this before launching your app
app.get('/test', function(req, res) {
  res.sendFile(path.join(__dirname, '/public/test.html'));
});

var port = process.env.PORT || 1337;
var httpServer = require('http').createServer(app);
httpServer.listen(port, function() {
    console.log('parse-server-example running on port ' + port + '.');
});

// This will enable the Live Query real-time server
ParseServer.createLiveQueryServer(httpServer);

Затем выполните следующую команду в терминале (внутри корневой папки linkbugapp808):

git add . && git commit -m "update linkbugapp808" && git push heroku master

На данный момент приложение создано на Heroku и готово к работе.

Затем из приложения iOS создайте учетную запись на Parse-Server, которую мы только что установили выше.

Кажется, все идет хорошо.

Пользователь, для которого была создана учетная запись, получит письмо, подобное этому:

Hi,

You are being asked to confirm the e-mail address [email protected] with LinkBugApp

Click here to confirm it:
https://linkbugapp808.herokuapp.com/apps/ABCDEF-12345678:xytzt_SSTTJJZ/verify_email?token=SiYyk9NgVkcwhXXWlEdEUTjyz&username=ausrnamex

При нажатии на ссылку подтверждения внутри письма это то, что можно увидеть (не совсем то, что ожидается от ссылки подтверждения регистрации):

Cannot GET /apps/ABCDEF-12345678:xytzt_SSTTJJZ/verify_email?token=SiYyk9NgVkcwhXXWlEdEUTjyz&username=ausrnamex 

Я пробовал с несколькими браузерами, но результат идентичен.

Почему мы попадаем в эту ситуацию?


person Michel    schedule 20.03.2018    source источник
comment
запустите его локально, используя вкладку сети devtools, чтобы отладить «404», попадающую по ссылке ответа электронной почты. дикая догадка, это http против https. но вы действительно должны отлаживать его! на cli ... «heroku local» запустит приложение. Для dev DB в тестовом режиме вы можете использовать инструменты mongo или использовать «parse-dashboard» для управления новыми пользователями, которых вы создаете. U R пропустил шаг (обычная отладка на локальном хосте), просто нажав на удаленный (мастер героку) и надеясь, что все это работает.   -  person Robert Rowntree    schedule 21.03.2018
comment
попробуйте w app.use(express.static('./'))   -  person Robert Rowntree    schedule 21.03.2018
comment
Возможно, вы правы, но обычно это работает так. И я действительно не знаю, как использовать сеть devtools (хотя, возможно, мне следует). Запуск heroku local показывает много ошибок, которых я никогда раньше не видел.   -  person Michel    schedule 21.03.2018
comment
Вы имеете в виду написать app.use(express.static('./')); вместо app.use(express.static(__dirname + '/public'));? Как бы я ни пытался, и если я сделаю замену, пользователь больше не получит письмо с подтверждением. Если я добавлю новую строку, ситуация не изменится.   -  person Michel    schedule 21.03.2018
comment
heroku можно запустить локально, по http, используя файл .env, расположенный в корне для config/env vars. Запуск локально и изучение использования devtools или aapl facsimile может помочь вам в долгосрочной перспективе с такими проблемами. я думаю, что вы получаете простое сообщение, не найденное по ссылке ... первое, что нужно сделать, это использовать вкладку сетевой отладки на локальном хосте, полный стек отладки, чтобы выяснить, почему сервер не может обработать этот URL-адрес.   -  person Robert Rowntree    schedule 21.03.2018
comment
ХОРОШО. Где я могу узнать о локальном запуске heroku и devtools, aapl? Поиск в Google devtools приводит меня к некоторым функциям Chrome, я не думаю, что это то, о чем вы думаете.   -  person Michel    schedule 21.03.2018
comment
@RobertRowntree Сейчас я копаюсь в локальном запуске heroku, но как я могу затем смоделировать создание пользователя, чтобы увидеть, как обстоят дела с проверкой электронной почты?   -  person Michel    schedule 21.03.2018
comment
Из того, что я вижу, и ваш serverURL, и publicServerURL неверны, это должно быть: ``` linkbugapp808.herokuapp.com/ анализ ```   -  person flovilmart    schedule 21.03.2018
comment
@flovilmart ДА! Если я изменю оба, как вы говорите, на linkbugapp808.herokuapp.com/parse. НАКОНЕЦ-ТО это работает! Большое спасибо. Чего я не понимаю, так это того, что, кажется, я пробовал это миллион раз раньше и получал ошибку: {error:unauthorized}.   -  person Michel    schedule 21.03.2018