在 OmniAuth 的某些条件下阻止用户访问 /auth/:provider

Prevent user from accessing /auth/:provider under some conditions in OmniAuth

有没有什么方法可以阻止用户访问 /auth/:provider,如果他们没有登录?我尝试使用 before_request_phase 回调和 Rack::Response 将它们重定向到登录页面,但没有用。

我的应用程序没有使用 omniauth 进行用户身份验证。相反,它用于将第三方帐户连接到用户配置文件。

谢谢!

好的,我找到的解决方案是创建一个新的 OmniAuth 策略,它继承自我想使用的策略并覆盖 request_phase 方法。无法在其初始化程序中仅使用 OmniAuth 配置获得相同的行为。

def request_phase
  if env['rack.session']['warden.user.user.key'].present?
    super
  else
    redirect '/'
  end
end
OmniAuth.config.before_request_phase = lambda do |env|
  user = env['warden'].authenticate!
end