Я всем.
Я пытаюсь реализовать omniauth с Facebook и Google с рельсами и фронтальной реакцией. Аутентификация обрабатывается гемом авторизации токена devise. Аутентификация работает правильно, поскольку я могу подписать пользователя и использовать Ax ios, чтобы перехватить заголовки и сохранить информацию, которая мне нужна, чтобы позволить ему / ей перемещаться по веб-сайту. Но у меня другая проблема:
- , когда я использую «обычную ссылку (http://localhost: 3000 / api / v1 / auth / facebook )», которая запустил процесс аутентификации. Процесс работает правильно, но у меня нет заголовков в ответе, поэтому Ax ios ничего не перехватывает для обновления локального хранилища. И если я пытаюсь визуализировать JSON, вместо этого я получаю страницу HTML с моим JSON на ней вот мой контроллер omniauth
class Api::V1::Users::OmniauthCallbacksController < DeviseTokenAuth::OmniauthCallbacksController
def facebook
@user = User.from_omniauth(request.env['omniauth.auth'])
if @user.persisted?
sign_in @user
# Normal case with no headers
redirect_to '/dashboard'
# manually trying to render a json
# headers = @user.create_new_auth_token
# response = Hash.new
# response["user"] = @user
# response["headers"] = headers
# render json: {response: response, status: :ok }
else
session['devise.facebook_data'] = request.env['omniauth.auth']
redirect_to new_user_registration_url
end
end
end
module DeviseTokenAuthReactOmniauth
class Application < Rails::Application
# Initialize configuration defaults for originally generated Rails version.
config.load_defaults 6.0
config.session_store :cookie_store, key: '_interslice_session'
config.middleware.use ActionDispatch::Cookies # Required for all session management
config.middleware.use ActionDispatch::Session::CookieStore, config.session_options
config.middleware.insert_before 0, Rack::Cors, debug: true, logger: (-> { Rails.logger }) do
allow do
origins '*'
resource '*',
headers: :any,
expose: ['access-token', 'expiry', 'token-type', 'uid', 'client'],
methods: [:get, :post, :options, :delete, :put]
end
end
end
end
, когда я запускаю связку exe c промежуточного программного обеспечения rake, я вижу, что Rack-cors находится после Webpacker
use Webpacker::DevServerProxy
use Rack::Cors
- И если я пытаюсь отправить запрос на публикацию после добавления этого маршрута
match '/api/v1/auth/facebook', to: 'api/v1/users/omniauth_callbacks#facebook', via: [:get, :post]
, я получаю RuntimeError ( Resource_class не найден). В этом случае кажется, что пространство имен и класс не распознаются. Я пробовал добавить префикс в свой файл omniauth.rb (OmniAuth.config.path_prefix = "/ api / v1 / auth"), но ничего не изменилось.
Это ссылка на мой проект для лучшего понимания. https://github.com/croisle/-devise-token-auth-react-omniauth
Кажется, что единственный способ запустить конфигурацию Rack-cors - это отправить запрос по почте. Я новичок ie, но думаю, что если я найду способ вернуть JSON, пойманный моими перехватчиками, это решит мою проблему, и мой пользователь будет перенаправлен на панель управления, но я его не вижу . Я надеюсь, что мое объяснение не для того, чтобы запутать, но если не просто сказать мне то, что непонятно. Так что любая помощь приветствуется. Спасибо