You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Google OAuth2验证时邮箱白名单配置后无法重定向至根路径问题

问题解决方法

你的核心问题出在save!方法上——这个方法在验证失败时会直接抛出异常,中断代码执行,导致控制器里的else分支根本没机会触发,自然没法重定向到根路径。

修复步骤

1. 修正模型中的from_omniauth方法

把模型里的admin.save!改成admin.save,这样验证不通过时会返回false,而不是抛出异常:

class Admin < ApplicationRecord
  # ... 其他代码保持不变 ...

  def self.from_omniauth(auth)
    admin = Admin.find_or_initialize_by(email: auth.info.email)
    admin.password = Devise.friendly_token.first(12)
    admin.skip_confirmation!
    admin.save # 替换原来的save!
    admin
  end

  # ... 其他代码保持不变 ...
end

2. (可选)优化邮箱验证写法

可以把自定义的test_email验证换成Rails标准的格式验证写法,让代码更规范:

class Admin < ApplicationRecord
  # ... 其他代码保持不变 ...

  devise :omniauthable, omniauth_providers: [:google_oauth2]                     
  # 替换原来的validates :email, :test_email和private方法
  validates_format_of :email, with: /\A[a-z.\-]+(\+\d+)?@test\.fr?\z/, message: 'Email is not correct'

  # ... 其他代码保持不变 ...
end

修复后流程说明

当用户用不符合规则的邮箱登录时:

  • admin.save会返回false,不会抛出异常
  • 控制器中@admin.persisted?会判断为false
  • 代码走到else分支,将错误信息存入flash,然后重定向到根路径

内容的提问来源于stack exchange,提问作者TheGame

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 14:06:19