Я следую инструкциям для oauth google, используя gem 'devise'
в рельсах.
Все в порядке, но теперь, когда я не могу изменить графику с представлениями,
Я понял, что контроллер, который я использую, перенаправляет свой метод на другие контроллеры и другие представления, которых нет в моем приложении, но которые находятся на другом пути (разработка 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