繁体   English   中英

谷歌 OAuth 2.0 + Ruby on Rails 404:“未找到。 身份验证通道。”

[英]Google OAuth 2.0 + Ruby on Rails 404: “Not found. Authentication passthru.”

以下是相关代码(如果我遗漏任何内容,请告诉我。)。

路线.rb:


devise_for :users, controllers: { omniauth_callbacks: 'users/omniauth_callbacks' }

devise_scope :user do 
    match '/sessions/user', to: 'devise/sessions#create', via: :post
    get '/join' => 'users/registrations#new'
end

resources :users do
    resources :video_lessons do
      resources :likes
    end
end

resources :users, only: [:show, :index]

devise.rb:

if Rails.env.production?
    config.omniauth :google_oauth2, ENV['GOOGLE_CLIENT_ID_PROD'[, ENV['GOOGLE_CLIENT_SECRET_PROD'], {}
else
    config.omniauth :google_oauth2, ENV['GOOGLE_CLIENT_ID_DEV'], ENV['GOOGLE_CLIENT_SECRET_DEV'], {}
end

omniauth_callbacks_controller.rb

  def google_oauth2
    # You need to implement the method below in your model (e.g. app/models/user.rb)
    @user = User.from_omniauth(request.env['omniauth.auth'])

    if @user.persisted?
      flash[:notice] = I18n.t 'devise.omniauth_callbacks.success', kind: 'Google'
      sign_in_and_redirect @user, event: :authentication
    else
      session['devise.google_data'] = request.env['omniauth.auth'].except(:extra) # Removing extra as it can overflow some session stores
      redirect_to new_user_registration_url, alert: @user.errors.full_messages.join("\n")
    end
  end

设计/注册/new.html.erb

<%= link_to "Sign up with Google", user_google_oauth2_omniauth_authorize_path %>

我的开发者控制台中的授权重定向 URI 是: http://localhost:3000/users/auth/google_oauth2https://localhost:3000/users/auth/google_oauth2

我已经完全按照文档( https://github.com/zquestz/omniauth-google-oauth2 )进行操作,但无济于事。

谢谢您的帮助!

我最近通过本指南得到了这个工作。 更具描述性的资源和指南的来源是这个官方 wiki 示例

提交显示了我使用我首先提到的指南在我的 rails 登录页面上设置的所有文件。

只需确保在使用任一指南时删除额外的部分数据,因为它可能会溢出某些 session 存储。 指南包含这一重要信息。 因此,在omniauth_callbacks_controller.rb 的这一行中,您当前的代码是正确的

...
    else
          session['devise.google_data'] = request.env['omniauth.auth'].except(:extra) # Removing extra as it can overflow some session stores
....

祝你好运!

<%= link_to "Sign in with Google", user_google_oauth2_omniauth_authorize_path, method: :post %>

请求应该是“发布”

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM