0

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

网址:http://localhost:4000

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

回调 url 是认证完成时 Github 将尝试到达的 url 对吗?

那么为什么当我点击我的链接时会出现 Github 页面 404 错误:

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

我正在开发本地主机开发环境,所以这可能是问题所在?

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

为什么?我的 routes.rb 中有这个

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

Rails 4 和 Omniauth 有问题吗?(在 localhost 中添加了空格,因此 stackoverflow 接受了我的帖子)

4

2 回答 2

0

我有 github 使用 gemomniauth-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

请参阅是否可以在我的代码中为 rails 开发环境设置 ENV 变量?有关详细信息。我在 github 上注册了 2 个应用程序。一种app_name-dev带有 key qsflk...、 urlhttp://localhost:3000和回调 url http://localhost:3000/auth/github/callback,一种app_name带有 key d1234a...

检查您是否正确执行了该操作。也许尝试更改localhost127.0.0.1.

于 2013-02-13T09:22:16.277 回答
0

对我来说,是 Github 新的更严格的 URI 匹配在尝试重定向到时产生了 404 http://localhost:3000/auth/github/callback,我通过将重定向 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 添加到生产环境的变量中,就可以了。

于 2013-11-02T11:25:28.150 回答