【问题标题】:What MongoDB user role can make POST calls?什么 MongoDB 用户角色可以进行 POST 调用?
【发布时间】:2014-11-08 20:22:12
【问题描述】:

我刚刚在 Ubuntu 14.04 上创建了一个 MongoDB 实例,并通过username:password. 进行身份验证 我创建的用户是这样的:

{
  "_id" : "myDatabase.myUser",
  "user" : "myUser",
  "db" : "myDatabase",
  "roles" : [ { "role" : "readWrite", "db" : "myDatabase" } ]
}

我在用 Node.js(使用 Express 和 Mongoose)编写的 REST API 上使用的 URI 字符串如下:

mongodb://myUser:password@localhost:27017/myDatabase

连接正常,GET 方法工作正常,但是当我使用POST 方法时,例如通过电子邮件/密码注册,响应是:

Status Code:405 Not Allowed

有什么想法吗?提前致谢!

仅供参考:我使用 Nginx 作为反向代理和前端的 Web 服务器(AngularJS 应用程序),配置是:

server {
  listen 80;
  server_name example.com;

  access_log /var/log/nginx/nginx.access.log;
  error_log /var/log/nginx/nginx.error.log;

  location / {
    expires -1;
    add_header Pragma "no-cache";
    add_header Cache-Control "no-store, no-cache, must-revalidate, post-check=0, pre-check=0";
    root /usr/share/www;
    try_files $uri $uri/ /index.html =404;
  }

  location /api/v1 {
    proxy_set_header "Access-Control-Allow-Origin";
    proxy_set_header "Access-Control-Allow-Methods" "GET, POST, OPTIONS, PUT, DELETE";
    proxy_set_header "Access-Control-Allow-Headers" "X-Requested-With,Accept,Content-Type, Origin";

    proxy_pass http://127.0.0.1:3000/api/v1;
    proxy_buffering on;

    proxy_set_header    Host        $host;
    proxy_set_header    X-Real-IP   $remote_addr;
    proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header    origin      "http://example.com";
  }
}

【问题讨论】:

    标签: node.js mongodb authentication nginx privileges


    【解决方案1】:

    我认为这不是 mongodb 限制。 Mongo 无法知道请求是 POST 还是 GET。您是否验证了请求是否到达 nodejs 服务器?我认为返回405状态码的是nginx。

    失败可能是由于尝试返回静态页面作为对 POST 请求的响应。尝试添加到 nginx.conf 文件中:

      # To dispatch static pages on POST request
      error_page 405 = 200 $uri;
    

    【讨论】:

    • 谢谢@Jose!我试过这个但还没有工作。我添加以下内容:proxy_redirect off; 并且有效!
    【解决方案2】:

    我添加了以下内容,至少 nginx 可以工作!:

    proxy_redirect off;

    现在默认的 nginx 配置是:

    server {
      listen 80;
      server_name example.com;
    
      access_log /var/log/nginx/nginx.access.log;
      error_log /var/log/nginx/nginx.error.log;
    
     location / {
       expires -1;
       add_header Pragma "no-cache";
       add_header Cache-Control "no-store, no-cache, must-revalidate, post-check=0, pre-check=0";
       root /usr/share/www;
       try_files $uri $uri/ /index.html =404;
     }
    
     location /api/v1 {
          proxy_set_header 'Access-Control-Allow-Origin' 'http:/example.com';
          proxy_set_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS, PUT, DELETE';
          proxy_set_header 'Access-Control-Allow-Headers' 'X-Requested-With,Accept,Content-Type, Origin';
    
          proxy_pass http://127.0.0.1:3000/api/v1;
          proxy_redirect off;
          proxy_buffering on;
    
          proxy_set_header    Host        $host;
          proxy_set_header    X-Real-IP   $remote_addr;
          proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;
          proxy_set_header    origin      "http://example.com";
       }
    }
    

    我希望这对某人有效。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-12-12
      • 2015-03-20
      • 2018-07-20
      • 2015-02-26
      • 2016-03-24
      • 2012-02-18
      • 1970-01-01
      • 2011-10-05
      相关资源
      最近更新 更多