首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Devise/谷歌OAuth 2:未找到。身份验证通过

Devise/谷歌OAuth 2:未找到。身份验证通过
EN

Stack Overflow用户
提问于 2017-03-24 10:46:28
回答 2查看 2.7K关注 0票数 5

的自述文件中的教程。omniauth-google-oauth2gem,当我点击我的根目录上的链接时(@pages#home)、

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

,我得到了错误:

找不到。身份验证通过。

我已经确认了ENV变量在那里。我一直在寻找类似的话题,但没有运气。知道我做错了什么吗?

在路由中:

代码语言:javascript
复制
Rails.application.routes.draw do
      devise_for :users, controllers: { :omniauth_callbacks => "users/omniauth_callbacks" }

我的无所不在_回调_控制器位于/controllers/users/omniauth_callbacks_controller.rb

代码语言:javascript
复制
class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController
  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
end

在我的devise.rb文件:

代码语言:javascript
复制
config.omniauth :google_oauth2, ENV["GOOGLE_CLIENT_ID"], ENV["GOOGLE_CLIENT_SECRET"], {
      name: 'my-project',
      scope: 'email',
      prompt: 'select_account',
      image_aspect_ratio: 'original',
      image_size: 100,
      ssl_verify: false
  }

在我的User.rb中:

代码语言:javascript
复制
devise :rememberable, :validatable, :omniauthable, :omniauth_providers => [:google_oauth2]

   def self.from_omniauth(access_token)
         data = access_token.info
         user = User.where(:email => data["email"]).first

         # Uncomment the section below if you want users to be created if they don't exist
         # unless user
         #     user = User.create(name: data["name"],
         #        email: data["email"],
         #        password: Devise.friendly_token[0,20]
         #     )
         # end

         user
     end
EN

Stack Overflow用户

发布于 2020-07-01 15:29:38

对于那些仍在寻找答案的人:

  1. 确保没有文件config/initializers/omniauth.rb在初始化器文件夹中。
  2. 在的最后一个config.omniauth参数处使用空哈希config/initializers/devise.rb如下所示:
代码语言:js
复制
config.omniauth :google_oauth2, ENV["GOOGLE_CLIENT_ID"], ENV["GOOGLE_CLIENT_SECRET"], {}

或者我们可以单独使用电子邮件作用域。因为它会告诉google我们通过电子邮件请求用户详细信息{ scope: "email" }

票数 0
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42990547

复制
相关文章

相似问题

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