我这里有一个棘手的场景,我自己还找不到解决方案。
这是设置。
MainAPI
-> api.lvh.me:3003TempFront
(将在几个月内删除)。 -> temp.lvh.me:3003在
TempFront
上,我已经设置了 Rails API 上缺少的内容,以便能够提供前端。除 omniauth 重定向外,一切正常。我一直在追踪错误,直到WardenManager#call
重定向后,会话不存储。我显然已经跳过了
protect_from_forgery
基于FAQ的回调方法,但它仍然无法正常工作。
Flash 也不共享。我认为它可能与同一问题有关。我很确定它来自某个地方的自定义配置,但我找不到确切的位置。
本地我正在使用 ngrok 进行回调。网址是
api.ngrok.my-domain.com
(与*.lvh.me
不匹配但直接指向正确的引擎MainAPI
)。
手动
sign_in(@user, event: :authentication)
后,有一个正确的会话密钥warden.user.v1_user.key
,值为[user_id]。这是正确的行为。这个相同的键在重定向后消失了。
这是我在
temp_front/lib/temp_front/engine.rb
上设置的初始化器
require 'webpacker'
module TempFront
##
# Engine initializers
class Engine < ::Rails::Engine
isolate_namespace TempFront
initializer 'webpacker.proxy' do |app|
insert_middleware =
begin
TempFront.webpacker.config.dev_server.present?
rescue StandardError
nil
end
next unless insert_middleware
app.middleware.insert_before(
0, Rails::VERSION::MAJOR >= 5 ?
Webpacker::DevServerProxy : 'Webpacker::DevServerProxy',
ssl_verify_none: true,
webpacker: TempFront.webpacker
)
end
initializer 'use action cookies and dispatch flash' do |app|
app.config.session_store :cookie_store, { key: '_my_app', domain: :all }
app.config.middleware.insert_before(Warden::Manager, ActionDispatch::Cookies)
app.config.middleware.insert_after(ActionDispatch::Cookies, ActionDispatch::Session::CookieStore,
opts)
app.config.middleware.insert_after(ActionDispatch::Session::CookieStore, ActionDispatch::Flash)
# https://guides.rubyonrails.org/configuring.html#configuring-middleware
# Rack::MethodOverride allows the method to be overridden
# if params[:_method] is set.
# This is the middleware which supports
# the PATCH, PUT, and DELETE HTTP method types.
app.config.middleware.use Rack::MethodOverride
end
end
end
这是我的回调控制器:
module MainAPI
class OmniauthCallbacksController < Devise::OmniauthCallbacksController
before_action :some_callbacks_to_handle_data
def facebook
sign_in @user, event: :authentication
flash[:notice] = 'You have done it!'
redirect_to mod_temp_front_engine.profile_url(subdomain: 'temp')
end
end
end
有人有解决这个问题的其他想法吗?