Omniauth 2.0 + Google" hd:"标签不起作用

时间:2016-02-14 09:39:41

标签: ruby-on-rails ruby authorization omniauth

尽管添加了" 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

解决此问题或替代解决方案的建议?

1 个答案:

答案 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" }