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 中使用已初始化的邮件适配器

使用 Parse Server 设置密码重置时出错

SQL Server CE 复制失败:内部错误:传输消息中的 HTTP 标头信息已损坏或丢失

为什么JSON.parse会损坏大数字,如何解决这个问题?

访问链接表连接属性已损坏 - 如何修复(或删除)?

安装 Parse Server 通用电子邮件适配器