的自述文件中的教程。omniauth-google-oauth2gem,当我点击我的根目录上的链接时(@pages#home
)、
<%= link_to "Sign up with Google", user_google_oauth2_omniauth_authorize_path %>
,我得到了错误:
找不到。身份验证通过。
我已经确认了ENV变量在那里。我一直在寻找类似的话题,但没有运气。知道我做错了什么吗?
在路由中:
Rails.application.routes.draw do
devise_for :users, controllers: { :omniauth_callbacks => "users/omniauth_callbacks" }
我的无所不在_回调_控制器位于/controllers/users/omniauth_callbacks_controller.rb
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
文件:
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中:
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
发布于 2017-03-28 03:31:32
有必要检查一下谷歌OAuth的重定向URI是否正确,并且包括
/callback
最后。
发布于 2020-07-01 15:29:38
对于那些仍在寻找答案的人:
config/initializers/omniauth.rb
在初始化器文件夹中。config/initializers/devise.rb
如下所示:config.omniauth :google_oauth2, ENV["GOOGLE_CLIENT_ID"], ENV["GOOGLE_CLIENT_SECRET"], {}
或者我们可以单独使用电子邮件作用域。因为它会告诉google我们通过电子邮件请求用户详细信息{ scope: "email" }
https://stackoverflow.com/questions/42990547
复制相似问题