2

我正在使用带有设计令牌身份验证的导轨。我想实现omniauth,但它让我一直在询问未初始化的常量用户

路线.rb

  namespace :api, defaults: { format: :json } do
    scope :v1 do
      mount_devise_token_auth_for 'User', at: 'auth', controllers: { omniauth_callbacks: 'users/omniauth_callbacks' }
    end
  end

在 app/controllers/api/v1/users/omniauth_callbacks_controller.rb

class OmniauthCallbacksController < DeviseTokenAuth::OmniauthCallbacksController

  def google_oauth2
    @user = User.from_omniauth(request.env["omniauth.auth"])

    if @user.persisted?
      sign_in @user, :event => :authentication #this will throw if @user is not activated
      set_flash_message(:notice, :success, :kind => "Google") if is_navigational_format?
    else
      session["devise.google_data"] = request.env["omniauth.auth"]
    end
    redirect_to '/'
  end
end

我不知道我在哪里做错了。我已经在谷歌尝试了所有答案但没有工作

4

1 回答 1

0

错误消息中未初始化的是它Users还是User常量?

让我们同时涵盖两者。


用户

在您routes.rb将控制器路径指定为'users/omniauth_callbacks'. 按照惯例,这意味着您的控制器被称为Users::OmniauthCallbacksController. 注意Users范围。

现在您可以删除路由的“用户”部分并将控制器向上移动到文件夹或在Users范围内创建控制器。

class Users
  class OmniauthCallbacksController < DeviseTokenAuth::OmniauthCallbacksController
    ...
  end
end


用户

User只是通常用于存储设计数据的模型。确保您的/app/models.

class User < ApplicationRecord
  devise :omniauthable, omniauth_providers: %i[google]
end
于 2020-11-19T07:37:45.910 回答