我正在使用gem 'devise'
在Rails中遵循oauth google指南。
一切都很好,但是现在我无法更改带有视图的图形,
我意识到我正在使用的控制器将其方法重定向到不在我的应用程序中但位于其他路径(设计gem)中的其他控制器和其他视图。 如何重定向应用程序中的所有内容?
解释一下,这是命令rake routes
的结果的一部分:
Prefix Verb URI Pattern Controller#Action
new_user_session GET /users/sign_in(.:format) devise/sessions#new
user_session POST /users/sign_in(.:format) devise/sessions#create
destroy_user_session DELETE /users/sign_out(.:format) devise/sessions#destroy
控制器动作映射到不在我的应用中但位于路径中的devise / session控制器上
".rvm/gems/ruby-2.6.1/gems/devise-4.6.2/app/controller..."
以便将目录中的视图称为
".rvm/gems/ruby-2.6.1/gems/devise-4.6.2/app/views..."
但是我希望控制器使用我的视图。
这是routes.rb
文件:
Rails.application.routes.draw do
devise_for :users, :controllers => { :omniauth_callbacks => "users/omniauth_callbacks" }
resources :homepage, only: [:index]
resources :schedules, only: [:index, :edit]
resources :notes, only: [:index, :edit]
resources :accounts, only: [:index, :edit]
root :to => 'homepage#index'
end
这是我创建的唯一控制器:
class Users::OmniauthCallbacksController < Devise::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
答案 0 :(得分:1)
Devise允许覆盖视图和控制器。通常,通过添加诸如app/views/devise/sessions/new.html.erb
之类的文件来覆盖视图就足够了,有一个生成器可以将默认视图复制到您的应用中:
rails generate devise:views
有关更多详细信息,请参见devise的README。