在Parse-Server(/ Heroku)上创建帐户时,我遇到了与电子邮件验证相关的问题。虽然我在这个问题上发了几篇文章,但我还是不够幸运(或者可能没有足够清楚地表达出来)以获得重要的帮助。所以我决定重新做一遍,这次给出一个精确的一步一步的方法来重现这个bug,对于任何有兴趣仔细观察的人来说。如果我从头到尾做的都是正确的,那么肯定会有一个错误。如果另一方面我做错了(这很可能就是这种情况),我希望有人可以指出错误。
以下是该过程,首先在终端上使用以下命令在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文件设置为此(修复需要修复的mailgun参数,以适应您的环境):
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: 'from@somemail.com',
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 usermail@xmail.com 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
我尝试过使用多种浏览器,但效果相同。
为什么我们会陷入这种情况?