Происхождение OmniAuth - откуда был вызван / auth / facebook - PullRequest
0 голосов
/ 11 февраля 2012

Я использую OmniAuth как способ, позволяющий пользователям связывать свои социальные сети в систему.Таким образом, у меня есть общее совпадение '/auth/:provider/callback', to: 'authentications#create' в моих маршрутах.

Это нормально, и я храню эту информацию для конкретного пользователя в таблице.Тем не менее, у меня есть другой способ использования OmniAuth, который не должен перекрывать этот.Пользователи могут использовать вызов / auth / facebook для входа в систему, и поэтому я должен не только сохранить эту информацию в таблице аутентификаций, но и зарегистрировать пользователя в системе.

С другой стороны, пользователь, который вошел в систему, может просто захотеть связать свою учетную запись Facebook без входа в систему, но вызов будет выполнен на ту же /auth/facebook.Поэтому мой вопрос: как я могу узнать, откуда был сделан этот звонок на auth/facebook?

1 Ответ

0 голосов
/ 11 февраля 2012

Идея будет иметь before_filter в контроллере аутентификации, который просто проверяет, вошел ли пользователь в систему. #sign_in? может выглядеть примерно так:

def sign_in?
 if @oauth.provider == 'facebook'
   if current_user?
     # then lets associate this facebook credentials with the logged-in user.
   else
     # user isn't logged in, so let's do that
     sign_in(@authentication.account)
   end
 end
end
...