【问题标题】:Omniauth authentication fails in Rails 4Rails 4 中的 Omniauth 身份验证失败
【发布时间】:2013-01-28 16:19:11
【问题描述】:

我在 Rails 4 中工作,我正在尝试使用 github 进行身份验证。所以在我的 Github 应用程序中,我有这个:

网址:http://localhost:4000

回调地址:http://localhost:4000/auth/github/callback

callback url 是认证完成后 Github 会尝试到达的 url 对吗?

那么为什么我在点击我的链接时会收到 Github 页面 404 错误:

<%= link_to 'Sign in with Github', '/auth/github' %>

我正在开发 localhost 开发环境,这可能是问题所在?

另外,当我在浏览器上输入 http:// localhost:4000/auth/github/callback 时,我得到一个 OmniAuth::Strategies::OAuth2::CallbackError

为什么?我的路线中有这个。rb

post 'auth/:provider/callback' => 'home#index'

Rails 4 和 Omniauth 有问题吗? (在 localhost 中添加空间,以便 stackoverflow 接受我的帖子)

【问题讨论】:

    标签: ruby omniauth ruby-on-rails-4


    【解决方案1】:

    我有 github 使用 gem omniauth-github 和一个文件config/initializers/omniauth.rb 包含

    Rails.application.config.middleware.use OmniAuth::Builder do
        provider :github, ENV['GITHUB_KEY'], ENV['GITHUB_SECRET']
    end
    

    但是,当我在浏览器上输入 http://localhost:3000/auth/github/callback 时,我也会得到 OmniAuth::Strategies::OAuth2::CallbackError,所以这应该不是问题。

    我的config/environment.rb 看起来像

    # Load the rails application
    require File.expand_path('../application', __FILE__)
    
    # Load the app's custom environment variables here, so that they are loaded before environments/*.rb
    app_environment_variables = File.join(Rails.root, 'config', 'app_environment_variables.rb')
    load(app_environment_variables) if File.exists?(app_environment_variables)
    
    ...
    

    我的config/app/environment_variables.rb 看起来像

    # OAuth Keys and Secrets
    if Rails.env.production?
      ENV['GITHUB_KEY'] = 'd1234a3a123a1a3a123c'
      ENV['GITHUB_SECRET'] = '1234azer123azer1231209jeunsghezkndaz1234'
    else
      ENV['GITHUB_KEY'] = 'qsflkjkj685bg554456b'
      ENV['GITHUB_SECRET'] = 'qslkfj7757kqfmlsdh675hlfsd587kjfdh687jsd'
    end
    

    有关详细信息,请参阅Is it possible to set ENV variables for rails development environment in my code?。 我在 github 上注册了 2 个应用程序。一个 app_name-dev 带有键 qsflk...、url http://localhost:3000 和回调 url http://localhost:3000/auth/github/callback 和一个 app_name 带有键 d1234a...

    检查您是否正确执行了该操作。也许尝试将localhost 更改为127.0.0.1

    【讨论】:

      【解决方案2】:

      对我来说,是 Github 新的更严格的 URI 匹配在尝试重定向到 http://localhost:3000/auth/github/callback 时产生了 404,我通过将重定向 URI 作为参数传递给 Omniauth 解决了这个问题。

      Rails.application.config.middleware.use OmniAuth::Builder do
          provider :github, ENV['GITHUB_KEY'], ENV['GITHUB_SECRET'], 
              :scope => 'user,public_repo', 
              :redirect_uri => ENV['GITHUB_REDIRECT']
      end
      

      如果您在 Linux/Mac 上,您可以从命令行添加环境变量。

      $ export GITHUB_REDIRECT=http://localhost:3000/auth/github/callback
      

      或者,您可以使用 Foreman 之类的东西,它可以让您添加一个 .env 文件,您可以使用该文件来存储您的变量。

      只需记住将适当的重定向 URI 添加到生产环境的变量中,就可以了。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-08-27
        • 1970-01-01
        • 2016-02-26
        • 2014-07-20
        • 2014-11-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多