首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >通过Nginx代理时的CallbackError和OmniAuth

通过Nginx代理时的CallbackError和OmniAuth
EN

Stack Overflow用户
提问于 2014-01-22 20:11:43
回答 2查看 1K关注 0票数 2

因此,我使用OmniAuth和GitHub策略来处理我的项目的用户身份验证。当直接访问Rails服务器时,一切都正常工作。最近,我建立了Nginx来处理开发前端和后端服务器之间的代理。现在,当我访问/auth/github时,OmniAuth发出了对GitHub的请求,但是在回调时失败了:

代码语言:javascript
运行
复制
Started GET "/auth/github/callback?error=redirect_uri_mismatch" for 127.0.0.1 at 2014-01-22 11:54:35 -0800
I, [2014-01-22T11:54:35.365773 #13656]  INFO -- omniauth: (github) Callback phase initiated.
E, [2014-01-22T11:54:35.366091 #13656] ERROR -- omniauth: (github) Authentication failure! redirect_uri_mismatch: OmniAuth::Strategies::OAuth2::CallbackError, redirect_uri_mismatch
E, [2014-01-22T11:54:35.366149 #13656] ERROR -- omniauth: (github) Authentication failure! invalid_credentials: OmniAuth::Strategies::OAuth2::CallbackError, redirect_uri_mismatch

我已经将我的应用程序在GitHub上的设置中的回调URL设置为正确的URL,它显然是正确地发出请求的,就在使用这个神秘的redirect_uri_mismatch

这里是我的Nginx服务器块:

代码语言:javascript
运行
复制
server {
    listen       8080;
    server_name  localhost;

    location / {
        proxy_pass http://localhost:9000;
    }

    location /api/ {
        proxy_pass http://localhost:3000;
    }

    location /auth/ {
        proxy_pass http://localhost:3000;
    }
}

虽然我是配置Nginx的相对菜鸟,但我看不出有什么好的理由不应该这样做。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-01-28 01:05:21

好的,这里的问题是我没有正确地设置我的标题。将以下内容添加到Nginx配置中的位置块中,修复了以下问题:

代码语言:javascript
运行
复制
location /api/ {
    proxy_set_header Host $http_host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header Client-IP $remote_addr;
    proxy_set_header X-Forwarded-For $remote_addr;
    proxy_pass http://localhost:3000;
}
票数 4
EN

Stack Overflow用户

发布于 2021-03-16 08:03:34

天哪,我花了一个月才修好这件事。我一直在- No route matches [GET] /auth/facebook

Nginx conf

代码语言:javascript
运行
复制
location @rails {
    proxy_set_header Host $http_host;
    proxy_set_header Client-IP $remote_addr;
    proxy_set_header X-Real-IP  $remote_addr;
    proxy_set_header X-Forwarded-For $remote_addr;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_pass http://rails_app;
  }

Gemfile

代码语言:javascript
运行
复制
#auth
gem 'omniauth-facebook', '~> 8.0'
gem 'omniauth', '~> 1.9.1' #this is important

application.rb

代码语言:javascript
运行
复制
config.force_ssl = ENV['CLIENT_URL'].include?("https")

omniauth.rb

代码语言:javascript
运行
复制
OmniAuth.config.logger = Rails.logger

Rails.application.config.middleware.use OmniAuth::Builder do
  provider :facebook, ENV['FACEBOOK_APP_ID'], ENV['FACEBOOK_APP_SECRET'],
          scope: 'email',
          callback_path: '/api/v1/auth/facebook/callback',
          image_size: 'large',
          secure_image_url: true,
          display: 'touch'
end
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21292978

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档