Сделайте Facebook ЕДИНСТВЕННЫМ / логин по умолчанию для приложения devise canvas

Я делаю приложение на холсте Facebook, размещенное на heroku. Для аутентификации я использую гем devise с гемом omniauth-facebook.

В настоящее время, когда приложение открыто, оно просит вас "Войти", используя свой адрес электронной почты и пароль, или нажать кнопку "Войти через Facebook".

Я хочу пропустить эту страницу, и когда пользователь загружает приложение, оно должно автоматически их аутентифицировать.

Как я могу это сделать?

1 ответ

Если ваше приложение facebook запрашивает разрешения у пользователя, и они авторизовали его, параметр signature_request, который передается в ваше приложение rails, должен содержать необходимую информацию. Поэтому вы можете декодировать параметр и извлечь идентификатор пользователя Facebook из самого хэша.

Попробуйте что-то вроде этого:

class ApplicationController

  before_filter :inspect_signed_request

protected
  def base64_url_decode(input)
    input += ('=' * (4 - input.length % 4) % 4)
    Base64.decode64(input.tr('-_', '+/'))
  end    
  def inspect_signed_request
    encoded_sig, payload = params[:signed_request].split('.', 2)

    # decode the data
    sig = base64_url_decode(encoded_sig)
    data = JSON.parse(self.class.base64_url_decode(payload))
    raise data.inspect
  end
end

Это в основном вызовет исключение, показывая вам детали подписанного запроса. По сути, вы можете просто разобрать его и проверить значение идентификатора FB для подписанного запроса. Если его там нет, вы можете добавить код, чтобы перенаправить их в форму входа.

Другие вопросы по тегам