2015-09-03 3 views
0

Я использую omniauth и разрабатываю и Google, чтобы пользователи заходили на сайт. Мне нужно только разрешить пользователям входить в систему, если у них есть конкретная электронная почта компании. Например, они нажимают на вход в Google и затем, если у них нет адреса электронной почты «@ somecompany.com», они могут успешно войти в систему. В противном случае они не могут войти в систему с обычным почтовым сообщением «@ gmail.com». Кажется, я не могу найти, где это сделать в документации.Google omniauth + devise + @domain access + rails

модель пользователя

def self.from_omniauth(access_token) 
    data = access_token.info 
    user = User.where(email: data['email']).first_or_initialize 
    user.given_name = data['first_name'] 
    user.family_name = data['last_name'] 
    user.password = SecureRandom.uuid 
    user.save! 
    user 
end 

OmniAuth контроллер

def google_oauth2 

    @user = User.from_omniauth(request.env["omniauth.auth"]) 

    if @user.persisted? 
    flash[:notice] = I18n.t "devise.omniauth_callbacks.success", :kind => "Google" 
    sign_in_and_redirect @user, :event => :authentication 
    else 
    session["devise.google_data"] = request.env["omniauth.auth"] 
    redirect_to new_user_registration_url 
    end 
end 

маршруты

devise_for :users, :controllers => { :omniauth_callbacks => "omniauth_callbacks" } 

ответ

0

Вы можете попробовать:

providers: 
     - { name: 'google_oauth2', app_id: 'APP-ID', 
     app_secret: 'APP-SECRET', 
     args: { access_type: 'offline', approval_prompt: 'auto', hd: 'example.com' } } 

где example.com изменяется на домене Вашей компании.

В противном случае вы можете попробовать эти ответы на StackOverflow:

  1. In Rails, is it possible to limit who can log in with google using the api?
  2. Restrict Login Email with Google OAuth2.0 to Specific Domain Name
+0

Спасибо, что это сработало, нужно было изменить контроллер ominaut, как и ссылку, которую вы мне отправили – wildrails

+0

рад, что это помогло :) –

0

Обновление ваш метод в качестве модели

def self.from_omniauth(access_token) 
data = access_token.info 
user = User.where(email: data['email']).first_or_initialize 
user.given_name = data['first_name'] 
user.family_name = data['last_name'] 
user.password = SecureRandom.uuid 
user.save! unless data['email'].split("@").include?('gmail.com') 
user 
end 

обновление google_oauth2 метод, а также для уже зарегистрированных пользователей

if @user.persisted? && [email protected]("@").include?('gmail.com') 
+0

я попробовал, но он по-прежнему позвольте мне войти в систему с @ gmail.com электронной почты – wildrails

+0

обновление моего ответа. Взгляни. Спасибо –

+0

, который сработал, спасибо – wildrails

Смежные вопросы