尽管添加了" hd:"标记到我的/config/initializers/omniauth.rb文件,不在域中的用户仍然可以登录。
Rails.application.config.middleware.use OmniAuth::Builder do
provider :google_oauth2, Rails.application.secrets.secret_key_base, Rails.application.secrets.secret_token,
skip_jwt: true,
scope: 'profile, email',
image_aspect_ratio: 'square',
image_size: 48,
access_type: 'online',
hd: 'domain.com',
name: 'google'
end
使用拥有域@ gmail.com的帐户登录时,用户仍然可以登录。
这是有用的:
user.rb
class User < ActiveRecord::Base
class << self
def from_omniauth(auth_hash)
user = find_or_create_by(uid: auth_hash['uid'], provider: auth_hash['provider'])
user.name = auth_hash['info']['name']
user.location = auth_hash['info']['location']
user.image_url = auth_hash['info']['image']
user.url = auth_hash['info']['urls']['user.provide.capitalize']
user.email = auth_hash['info']['email']
user.save!
user
end
end
end
解决此问题或替代解决方案的建议?
答案 0 :(得分:0)
hd
标记仅在连接到Google的oAuth系统时设置请求网址参数。它可以很容易地被用户更改,即使没有更改,我发现它在阻止不受欢迎的域中效率低下。
解决此问题的最佳方法是对User
模型执行验证,如下所示:
validates :email, format: { with: /\b[A-Z0-9._%a-z\-]+@domain\.com\z/,
message: "must be a domain.com account" }