Parse Server 电子邮件中的链接已损坏(验证帐户、重置密码...)
Posted
技术标签:
【中文标题】Parse Server 电子邮件中的链接已损坏(验证帐户、重置密码...)【英文标题】:Links in Parse Server emails are broken (validate account, reset password...) 【发布时间】:2021-11-24 09:11:12 【问题描述】:我尝试在本地服务器 (Ubuntu 20.04) 上安装 Parse 服务器。
所有功能都可以正常工作...除了一个:电子邮件系统(例如用于重置密码或验证电子邮件地址)。我安装了一个适配器并发送了电子邮件,但它们包含的链接已损坏:当我单击它时,我被重定向到“无效链接”页面。经过几个小时的调查,我不明白发生了什么。
这是我的配置文件:
首先,我使用 nginx 作为代理,这是我的域名配置文件中涉及我的 Parse 服务器的部分:
location ~ ^/parse/(.*)$
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-NginX-Proxy true;
proxy_pass http://127.0.0.1:1337/parse/$1;
proxy_ssl_session_reuse off;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_set_header Host $host;
location /parsedashboard
include proxy_params;
proxy_pass http://0.0.0.0:4040;
location /login
include proxy_params;
proxy_pass http://0.0.0.0:4040/login;
location /bundles
include proxy_params;
proxy_pass http://0.0.0.0:4040/bundles;
location ~ ^/apps(.*)$
include proxy_params;
proxy_pass http://0.0.0.0:4040/apps$1;
这是我的 Parse config.js 文件:
"appName": "App name - Parse Server",
"logsFolder": "/var/www/my/app/logs/",
"databaseURI": "mongodb://localhost:27017/parsedb",
"appId": "my_app_id",
"masterKey": "my_master_key",
"serverURL": "http://localhost:1337/parse",
"publicServerURL": "https://my_domain.ovh/parse",
"port": 1337,
"cloud": "/var/www/my/app/cloud/main.js",
"push":
"android":
"apiKey": "my_api_key"
,
"liveQuery":
"classNames":["Class_1", "Class_2", "Class_3"]
,
"verifyUserEmails": true,
"emailAdapter":
"module": "parse-server-mailgun-adapter-template",
"options":
"fromAddress": "My app ",
"domain": "my_domain.mailgun.org",
"apiKey": "my-api-key"
电子邮件中包含的链接看起来不错,例如:
https://my_domain.ovh/parse/apps/APP_ID/request_password_reset?token=TOKEN&username=juju
但正如我所说,它重定向到“无效链接”页面。
我试图通过在 parse-server/lib/Routers/PublicAPIRouter.js 中的 requestResetPassword(req) 方法中添加一些日志来了解为什么会发生这种重定向,我看到从查询中获得的用户名和令牌是空的:
const
username,
token: rawToken
= req.query;
const token = rawToken && typeof rawToken !== 'string' ? rawToken.toString() : rawToken;
if (!username || !token)
_logger.default.info(" - usn : " + (!username) + ", token : " + (!token));
return this.invalidLink(req);
我有日志:“-usn : true, token : true”
我不是 NodeJS 方面的专家(委婉说法 ^^),所以我真的不知道如何继续我的调查。
您知道这个问题的原因吗? (有关信息,我的 Parse 服务器的所有其他功能都可以正常工作:数据库访问、云代码、实时查询、仪表板......)
提前谢谢你:)
朱利安
【问题讨论】:
【参考方案1】:感谢 Parse 社区论坛的 davimacedo,我找到了解决方案 :)
问题是nginx反向代理配置错误:请求参数没有转发到Parse服务器。
详细信息可以在这个线程中找到: How can query string parameters be forwarded through a proxy_pass with nginx?
对于我的配置,这意味着只需在“proxy_pass”行的末尾添加 $is_args$args。完整的行是:
proxy_pass http://127.0.0.1:1337/parse/$1$is_args$args;
在此之后,一切都按预期工作 \o/
【讨论】:
以上是关于Parse Server 电子邮件中的链接已损坏(验证帐户、重置密码...)的主要内容,如果未能解决你的问题,请参考以下文章
在 Parse 服务器 CloudCode 中使用已初始化的邮件适配器